C 平面阵列和二维阵列使用相同的内存量吗?
在编写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的连续内存
chara[200][100]
是否比chara[20000]
使用更多的内存空间
(我知道在某些语言中是这样的,但这是关于C语言的)
那么,例如chara[200][100]
是否比chara[20000]
占用更多的内存空间
否,char a[200][100]
使用的内存量与char a[20000]
使用的内存量相同
两者都需要能够容纳20000
char
s的连续内存
那么,例如chara[200][100]
是否比chara[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数组相同的内存量,唯一的区别是它们的访问方式。