int a[]={10,20,30,40};
int x=0;
int v=a[++x]+ ++x + a[--x];
printf("%d",v);
该程序的输出是什么?C程序的输出
完全与输出混淆。没有办法根据我的运营商优先级知识来完成。
据我所知,在这个表达式中,数组下标[]具有最高的优先权,应该先执行。所以这两个[]应该从左到右执行。在这种情况下,x的值将首先递增,然后递减并最终回到0.因此表达式将变为int v=a[0] + ++x + a[0]
。然后前增量的优先级最高,它将增加到1.所以我们的表达式将变为int v=a[0]+1+a[0]
。所以最终的产量将是21.
但事实并非如此。我检查了不同的编译器实现,没有人打印21.
我感到非常惊讶,因为打印的值是43,这是我无法理解的地方。这就是为什么我希望有人能够帮助我理解并得出结果43.
其他人建议的链接仅使用增量和相同的右值和左值情况。但是这有些不同而且不清楚。我试图为此构造表达式树并解决了43范围内没有的地方。这段代码的
至少有人应该告诉我子表达式评估的顺序是什么。 – vicky 2013-05-03 09:02:02