详细解释使用3D阵列的程序输出?

时间:2014-07-13 08:03:48

标签: c++ multidimensional-array

告诉我如何生成“3 6 1”下面代码的输出?

int main()
{

int a[2][3][2]={{{1,2},{9,8},{3,7}},{{2,2},{1,4},{5,4}}};

printf("%d %d %d",a[1]-a[0],a[1][0]-a[0][0],a[1][0][0]-a[0][0][0]);

return 0;
}

我不知道如何仅使用[1]或[0]来访问元素以进行减法。由于它是3D数组,因此应该像[0] [1] [2]一样访问。谢谢。

1 个答案:

答案 0 :(得分:0)

您可以将其成像为:

a [0]和[1] = 3个元素乘2个int(2-d数组)(每个的大小= 2 * int)

a [0] [0]和[1] [0] = 2个元素by int(size = int)

a [0] [0] [0]和[1] [0] [0] =实际int值,因此可以减去它们(2 - 1 = 1)

如果编译器不能直接减去值,那么他就减去结构"一世。即a [1] - a [0] =(([1]的开始) - ([0]的开始))/ sizeof([0]的元素)=(6 * int)/(2 * int )= 3

在[1] [0]和[0] [0]之间分配了6个int,所以a [1] [0] - a [0] [0] =(([a]的开始1] [0]) - ([0] [0]开始))/ sizeof([0] [0]的元素)=(6 * int)/(1 * int)= 6

一些建议:

1)使用调试器和反汇编程序!我只是看看asm代码,看看它是如何计算的。

2)忘记如此不明确的方式获取元素之间的元素数量!这是非常糟糕的做法,只是为了愚蠢的考试知识。

P上。 S.抱歉英语不好..我试过写得正确,但可能在某处出错。