在编写C代码以回答关于有限内存情况的问题时,我想知道是否可以使用平面数组而不是(矩形)二维数组(其大小)来保存任何内存空间在编译时已知。
那么,例如, char a[200][100]
使用的内存空间比char a[20000]
多?
(我知道它在某些语言中有用,但这是特别关于C)
答案 0 :(得分:3)
那么,例如,
char a[200][100]
使用的内存空间多于chara[20000]
?
不,char a[200][100]
使用与char a[20000]
相同的内存量。
两者都需要可以保留20000
char
的连续内存。
答案 1 :(得分:1)
[200] [100]和[20000]之间没有区别。对于a [200] [100],C使用列数来计算偏移量,因为它只是指向char类型的内存的指针。所以如果你想要[20] [5]那么C会计算出[20] [5] = *(a + 20 * 100 + 5);我应该提到C是行主要(或者在计算中首先使用行)。
因此,如果您知道数组的尺寸,则可以使用[20000]进行相同的计算。
从软件通信的角度来看,如果它是静态的,我会使用char [200] [100],因为它通信你的结构是200行乘100列。这使编译器可以为您进行计算。