【问题标题】:Output of C program [duplicate]C程序的输出[重复]
【发布时间】:2013-05-02 11:00:53
【问题描述】:
int a[]={10,20,30,40};
int x=0;

int v=a[++x]+ ++x + a[--x];
printf("%d",v);

这个程序的输出是什么?

与输出完全混淆。根据我的运算符优先级知识,这不可能完成。

据我所知,在这个表达式中,数组下标 [] 具有最高优先级,应该首先执行。所以两个 [] 应该首先从左到右执行。在这种情况下,x 的值将先递增,然后递减,最后回到 0。因此表达式将变为 int v=a[0] + ++x + a[0]。然后预增量具有最高优先级,它将递增到 1。所以我们的表达式将变为int v=a[0]+1+a[0]。所以最终输出将是 21。

但事实并非如此。我检查了不同的编译器实现,没有人打印 21。

我很惊讶,因为打印的值是 43,这对我来说是无法理解的。这就是为什么我希望有人帮助我理解并得出结果 43。

其他人建议的链接仅使用增量以及相同的右值和左值情况。但这有些不同,也不清楚。我试图为此构建表达式树并解决,但 43 不在范围内。

【问题讨论】:

  • 至少有人应该告诉我子表达式求值的顺序是什么。

标签: c expression-trees operator-precedence


【解决方案1】:

这段代码的输出:

int v=a[++x]+ ++x + a[--x];

未定义,它取决于编译器的实现。

【讨论】:

  • 是的,它取决于编译器的实现。但是假设一个特定的编译器我们不能猜出一个满足我们逻辑的输出。
猜你喜欢
  • 2014-09-07
  • 1970-01-01
  • 2017-10-07
  • 1970-01-01
  • 1970-01-01
  • 2013-12-07
  • 1970-01-01
  • 2017-05-04
  • 2015-11-01
相关资源
最近更新 更多