【发布时间】:2013-06-12 02:31:55
【问题描述】:
从朋友那里听说,C 中的二维数组仅在语法上受支持。
他告诉我最好使用float arr[M * N] 而不是float[M][N],因为像 gcc 这样的 C 编译器不能保证在每个系统/平台上,数据都在内存中串联。
我想在我的硕士论文中使用它作为论据,但我没有任何参考。
所以第一个问题:
他说的对吗?
第二个问题:
你知道在哪里可以找到这句话的书或文章吗?
谢谢+问候
【问题讨论】:
-
Kernighan 和 Ritche 合着的 C Programming Language 是最好的书。看看吧
-
K&R 不错,但一年比一年过时。最后一次修订是在 1988 年。
-
@JackAidley,标准没有说明物理内存。我认为这就是丹尼尔试图达到的目的。
-
@DanielFischer:啊,好吧。我同意你的观点。不过,对程序员来说,逻辑连续性很重要。
-
@DanielFischer 如果您指的是 MMU 的虚拟物理映射,这在 C 中完全不相关,因为在 C 中无法检测到。数组和数组的数组在内存中是连续的,即地址增加没有间隙,并且 sizeof(x[N][M]) == sizeof (x[N*M])。