c-programming中的3d数组

时间:2015-12-15 08:22:04

标签: 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 个答案:

答案 0 :(得分:2)

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

+------------+   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]和{{1} }}。六个条目。

答案 1 :(得分:0)

在地址处,[1]和[1] [0]是相同的值。并且[0]和[0] [0]是相同的值。

但类型不同。

a [1] [0]和[0] [0]是int *,从[0] [0]到[1] [0],有6个int。

从[1]到[0],有3个{x,y}。

a [1] [0] [0]和[0] [0] [0]为int,a [1] [0] [0] -a [0] [0] [0] = 5 - 1 = 4。

答案 2 :(得分:0)

在C中,多维数组在概念上是一个数组,其元素也是数组。所以如果你这样做:

int array [2] [3];从概念上讲,你最终得到:

array[0] => [0, 1, 2]
array[1] => [0, 1, 2]

int array [2] [3] [2]; ......会给你一个像这样的结构:

array[0] => [0] => [1, 2]
            [1] => [3, 4]
            [2] => [5, 6]
array[1] => [0] => [5, 8]
            [1] => [9, 10]
            [2] => [11, 12]

a [1] -a [0] =&gt;你会得到不同的单位类型。 a [0]和[1]是int,它们之间有三个单元。类似于第二部分

a [1] [0] -a [0] [0] = 6

[0] [0]和[1] [0]之间的组合数为6。