C语言中3d数组代码输出的说明

时间:2014-10-25 07:05:18

标签: c

 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]);
  }

//此代码的输出为3 6 1

我需要知道这个输出是怎么来的。我搜索了很多网站,但没有得到任何合适的答案。

1 个答案:

答案 0 :(得分:2)

 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]);

划分:

 printf("%d",a[1]-a[0]); // result = 3 (because a[x] decays into int (*)[2])

 {{{1,2},{9,8},{3,7}},{{2,2},{1,4},{5,4}}}
   _____ _____ _____
     1     2     3    (elements of type int[2])

 printf("%d",a[1][0]-a[0][0]); // result = 6 (because a[x][x] decays into int *)

 {{{1,2},{9,8},{3,7}},{{2,2},{1,4},{5,4}}}
    _ _   _ _   _ _
    1 2   3 4   5 6   (elements of type int)

 printf("%d",a[1][0][0]-a[0][0][0]); // result = 1 (because 2 - 1 = 1)

 {{{1,2},{9,8},{3,7}},{{2,2},{1,4},{5,4}}}
    ^ a[0][0][0]        ^ a[1][0][0]

请注意printf的正确格式为:

printf("%ld %ld %d",a[1]-a[0],a[1][0]-a[0][0],a[1][0][0]-a[0][0][0]); /* C89 */

printf("%td %td %d",a[1]-a[0],a[1][0]-a[0][0],a[1][0][0]-a[0][0][0]); /* C99 */