一个C++题目,关于运算符优先级

来源:百度知道 编辑:UC知道 时间:2024/05/18 10:32:11
void main()
{ int a=5,t;
t=++a*--a;
printf("%d",t) ;
}
为什么答案是 25?

楼上的不对,++,--的优先级高于乘,所以是:a++,a--,然后a还是5,就是5x5=25了

这个问题在不同的机器上运行结果不同,结果是未定义的,编程的时候要避免这个。
有关这个问题你去迅雷上面搜一下 pointers on c (c 和指针 ),这本书里面涉及到运算符的部分对这个问题有详细的讲解。我查了一下,在83页。

PS:如果你C有一定的基础,建议你买本pointers on c,你会收益匪浅的。

书上原话:

由于表达式的求值顺序并非完全有操作符的优先级决定,所以想下面这样的语句是很危险的

c+ --c;

.....(还有很多解释,你自己看看吧)

祝好运

建议不要使用这样的写法,结果是未定义的。取决于运行的平台。

t=++a*--a中,乘法*的优先级最高,首先计算a*a,然后是++和--的运算,不管是自增还是自减,t的值已经确定,不会改变

a存储地址一样 从后到前 --a为4 但前面++a为5;结果为5*5