c - C 编程中的 3D 数组

标签 c arrays

#include <stdio.h>

int main()
{
    int a [2][3][2]={{{1,2},{3,4},{5,6}},{{5,8},{9,10},{11,12}}};

    printf("%d\n%d\n%d\n",a[1]-a[0],a[1][0]-a[0][0],a[1][0][0]-a[0][0][0]);
    return 0;
}

输出为3 6 4。谁能向我解释一下原因吗?为什么 a[1]-a[0]=3a[1][0]-a[0][0]=6 以及如何 a[]a[][] 解释为 3 维数组?

最佳答案

如果您了解像您这样的数组如何在内存中布局,这可能会有所帮助:

+------------+   Low address    +---------+   Low address    +------+
| a[0][0][0] |                  | a[0][0] |                  | a[0] |
| a[0][0][1] |                  |         |                  |      |
| a[0][1][0] |                  | a[0][1] |                  |      |
| a[0][1][1] |                  |         |                  |      |
| a[0][2][0] |                  | a[0][2] |                  |      |
| a[0][2][1] |                  |         |                  |      |
| a[1][0][0] |                  | a[1][0] |                  | a[1] |
| a[1][0][1] |                  |         |                  |      |
| a[1][1][0] |                  | a[1][1] |                  |      |
| a[1][1][1] |                  |         |                  |      |
| a[1][2][0] |                  | a[1][2] |                  |      |
| a[1][2][1] |                  |         |                  |      |
+------------+   High address   +---------+   High address   +------+

那么知道您得到的差异是类型的倍数会有所帮助。所以对于a[0]a[1]类型是int[3][2] a[0] 之间有三个倍数和a[1] .

同样适用于a[0][0]a[1][0] ,类型为int[2] ,相差六 int[2] a[0][0]之间的单位和a[1][0] .


详细说明一下:a[0]之间和a[1]你有a[0][0] , a[0][1]a[0][2] 。三个条目。

之间a[0][0]a[1][0]你有a[0][0][0] , a[0][0][1] , a[0][1][0] , a[0][1][1] , a[0][2][0]a[0][2][1] 。六个条目。

关于c - C 编程中的 3D 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34284093/

相关文章:

c - Visual Studio Code 忽略调试符号

c - 从字符串中删除多余的空格(就地)

c - 是否有任何解决方法可以在 C 中以某种方式使结构成员成为 'private'?

java - 使用定义的代码从数组中获取字符串

php - PHP Documentor 中的注释关联数组

c - "[*]"(星号修饰符)在 C 中是什么意思?

c++ - 计算位掩码,枚举 0

c - 程序未正确检测结束条件

arrays - Swift 中的链表

java - 复制一个数组