一个C++题目,关于运算符优先级
来源:百度知道 编辑:UC知道 时间:2024/05/18 10:32:11
void main()
{ int a=5,t;
t=++a*--a;
printf("%d",t) ;
}
为什么答案是 25?
{ 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