【问题标题】:Explanation for the output of 3d array code in CC中3d数组代码输出的解释
【发布时间】:2014-10-25 07:05:18
【问题描述】:
 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吗? a[1][0]a[0][0] 的类型是什么? a[1]a[0]有哪些类型?
  • “我已经在很多网站上搜索过相同的内容,但没有得到任何合适的答案。” - 搜索引擎在那里寻找知识,而不是愚蠢测验的答案。你能说出你正在寻找的知识吗?

标签: c


【解决方案1】:
 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 */

【讨论】:

猜你喜欢
  • 2021-10-06
  • 2015-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-03
  • 1970-01-01
  • 2016-09-28
  • 1970-01-01
相关资源
最近更新 更多