在编写C代码以回答一个关于内存有限的问题时,我想知道使用平面数组而不是(矩形)二维数组(编译时已知其大小)是否可以节省内存空间。
那么,例如char a[200][100]
是否比char a[20000]
使用更多的内存空间?
(我知道在某些语言中是这样,但这是关于C的)
那么,例如
char a[200][100]
比chara[20000]
使用更多的内存空间吗?
否,char a[200][100]
使用的内存量与char a[20000]
相同。
两者都需要能够容纳20000
char
s的连续内存。
[200][100]和[2000]之间没有区别。对于a[200][100]C,使用列数来计算偏移量,因为a只是指向char类型内存的指针。因此,如果你想要一个[20][5],那么C会计算一个[20][5]=*(a+20*100+5);我应该提到C是行主(或者在计算中使用行优先)。
因此,如果你知道数组的维数,你可以用[2000]进行同样的计算。
从软件通信的角度来看,如果它是静态的,我会使用char a[200][100],因为它通信的结构是200行乘100列。这样编译器就可以为您进行计算。