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