-4
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 不在范围内。

4

1 回答 1

2

此代码的输出:

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

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

于 2013-05-02T11:07:56.047 回答