#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]=3
和a[1][0]-a[0][0]=6
以及a[]
和a[][]
如何在三维数组中解释?
答案 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。