我试图理解一些 C 代码,但我无法解决以下问题:
为什么通过使用 1 维访问数组来打印数组时会颠倒存储值打印值的顺序?
如果数组声明为
[3][4]
数组,是否可以引用array[3][x]
中的值?
作者初始化了一个二维数组-word[3][4]
,根据我的理解在内存中创建了一个3行4列的数组-
Col 0 Col 1 Col 2 Col 3
Row 0 [0][0] [0][1] [0][2] [0][3]
Row 1 [1][0] [1][1] [1][2] [1][3]
Row 2 [2][0] [2][1] [2][2] [2][3]
稍后,将值写入数组,根据循环控制变量 z
对行进行硬编码并更改列,从 0-3
:
word[0][z]
word[1][z]
word[2][z]
word[3][z]
最后引用一维显示数组:
printf("%x", *((unsigned int *)word[i]));
这似乎以相反的方式打印存储在内存中的值:
75757575
42424242
48484849
即使它们保存在内存中,如下所示:
0xbfa33050: 75757575
0xbfa33054: 42424242
0xbfa33058: 49484848
想法?
最佳答案
根据标准数组的元素在内存中是连续的(这是数组的主要属性)。因此,任何数组,无论其维度如何,在内存中都具有相同的表示形式,使用乘法索引 - 是语法糖。
关于c - 如何使用一维访问 C 中的二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22454577/