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
我需要知道这个输出是怎么来的。我搜索了很多网站,但没有得到任何合适的答案。
答案 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 */