平面和二维阵列使用相同数量的内存吗?

时间:2016-07-29 04:04:31

标签: c arrays multidimensional-array

在编写C代码以回答关于有限内存情况的问题时,我想知道是否可以使用平面数组而不是(矩形)二维数组(其大小)来保存任何内存空间在编译时已知。

那么,例如, char a[200][100]使用的内存空间比char a[20000]多?

(我知道它在某些语言中有用,但这是特别关于C)

2 个答案:

答案 0 :(得分:3)

  

那么,例如, char a[200][100]使用的内存空间多于char a[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列。这使编译器可以为您进行计算。