二维数组的内存存放问题

c语言里面二维数组是按照行存放的,那么比如我有3行3列矩阵a,那么a[1][2]在内存中的下一个就是a[2][0]么?也就是行和行之间在内存中是连续的么

是连续的。
c跟c++内存上看都只有一维的数组,也就是,只要你声名了一个数组,那么这个数组的所有元素都是在内存中顺序存放的。
所谓的多维数组只是一种逻辑概念或者处理数据的组织形式。
比如 数组 Int arr[3][3][3] 这个数组对于编译器来说就是一个容量为3*3*3的一维数组。
之所以分为三个维度,只是把这27个数据进行了分组,便于我们的使用。
注意区别定义数组的时候维度里面的数值体现的是组织形式,当我们使用的时候,维度里面要体现数据的位置,比如arr[2][1][0]每个维度里面的值只能取0-2来表示位置。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-12-14
其实不管是一维还是二维在内存中都是按一维存放的,二维只是逻辑上的,只是为了逻辑上处理方便追问

。。。亲,正面回答问题啊

追答

我回答的还不够清楚么,按一维的形式存放,a[1][2]的下一个肯定就是a[2][0]啊,他们在物理内存中是连续存放的

第2个回答  2019-10-07
因为你的a[m][n]有12个元素,所以end-begin(即p-a[0])肯定恒为11。因为指针相减的结果是元素差而不是地址差。比如若有int
a[3]={1,2,3};则&a[1]-&a[0]=1,而它们的地址值却相差4。在内存中无论几维数组,都是按一维数组存放的。比如二维数组,第一行最后一个元素后就紧接着第二行的第一个元素,依此类推。这也是多维数组都可以降维为一维数组来处理的原因。
第3个回答  2012-12-14
是连续的啊,二维和一维一样,一个循环也可以全部输出来。
第4个回答  2012-12-14
亲,第一行完了,就第二行呀,,,3行3列的也就是9个元素,按行列顺序存的,,a[1][2]是第六个元素,a[2][0]是第七个元素,
相似回答