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

C 平面阵列和二维阵列使用相同的内存量吗?,c,arrays,multidimensional-array,C,Arrays,Multidimensional Array,在编写C代码回答关于内存有限的问题时,我想知道使用平面数组而不是(矩形)二维数组(其大小在编译时已知)是否可以节省内存空间 那么,例如chara[200][100]是否比chara[20000]使用更多的内存空间 (我知道在某些语言中是这样的,但这是关于C语言的) 那么,例如chara[200][100]是否比chara[20000]占用更多的内存空间 否,char a[200][100]使用的内存量与char a[20000]使用的内存量相同 两者都需要能够容纳20000chars的连续内存

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

那么,例如
chara[200][100]
是否比
chara[20000]
使用更多的内存空间

(我知道在某些语言中是这样的,但这是关于C语言的)

那么,例如
chara[200][100]
是否比char
a[20000]
占用更多的内存空间

否,
char a[200][100]
使用的内存量与
char a[20000]
使用的内存量相同

两者都需要能够容纳
20000
char
s的连续内存

那么,例如
chara[200][100]
是否比char
a[20000]
占用更多的内存空间

否,
char a[200][100]
使用的内存量与
char a[20000]
使用的内存量相同


两者都需要能够容纳
20000
chars的连续内存。

在[200][100]和[20000]之间没有区别。对于a[200][100],C使用列数来计算偏移量,因为a只是指向char类型内存的指针。如果你想要一个[20][5],那么C会计算出一个[20][5]=*(a+20*100+5);我应该提到,C是行主键(或者在计算中使用行首键)

因此,如果您知道数组的维数,您可以使用[20000]进行相同的计算


从软件通信的角度来看,如果它是静态的,我会使用char a[200][100],因为它通信的结构是200行乘100列。这让编译器为您进行计算

a[200][100]和a[20000]之间没有区别。对于a[200][100],C使用列数来计算偏移量,因为a只是指向char类型内存的指针。如果你想要一个[20][5],那么C会计算出一个[20][5]=*(a+20*100+5);我应该提到,C是行主键(或者在计算中使用行首键)

因此,如果您知道数组的维数,您可以使用[20000]进行相同的计算


从软件通信的角度来看,如果它是静态的,我会使用char a[200][100],因为它通信的结构是200行乘100列。这让编译器为您进行计算

它将占用与1-D数组相同的内存量,唯一的区别是它们的访问方式。它将占用与1-D数组相同的内存量,唯一的区别是它们的访问方式。