2013-05-02 99 views
-4
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范围内没有的地方。这段代码的

+0

至少有人应该告诉我子表达式评估的顺序是什么。 – vicky 2013-05-03 09:02:02

回答

2

输出:

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

不确定,它依赖于编译器实现。

+0

是的它取决于编译器的实现。但是,假设一个特定的编译器不能猜测满足我们逻辑的一个输出。 – vicky 2013-05-03 09:01:09