c - 如何使用一维访问 C 中的二维数组

标签 c arrays

我试图理解一些 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/

相关文章:

c - 如何在不修改程序的情况下通过fork启动一个进程的两个实例

c - "make clean"结果 "No rule to make target ` 干净 '"

java - 将文本字段的值添加到数组中

iphone - 在 UITableView 中显示元素,就像 iPhone 联系人一样,分成按字母顺序排列的部分?

c - 是否存在使用内置库比第三方库更好的情况?

c - C 编程中的感叹号和 `strcmp` 函数

c - 为什么 execvp 的 argv 参数不是 const?

python - 为什么我可以在 numpy 数组中多次执行 "[:]"?

php - 将 php 数组移动到 jquery 中进行操作

javascript - 使用数组作为具有handsontable的列