关于++运算符的疑点,大家赐教
关于++运算符的疑问,大家赐教。#includeiostream.hvoid main(){intz 3intc0c (++z) + (++z) cout
关于++运算符的疑问,大家赐教。
#include<iostream.h>
void main()
{
int z= 3;
int c=0;
c = (++z) + (++z) ;
cout<<c<<endl;
cout<<z<<endl;
}
原以为C的值应该是4+5=9;运行结果是10;答案给的解析如下:
这个涉及到两个知识点:
第一个是++运算,放在前面的话是用++后的值参与运算
第二个是优先级,小括号的优先级最高,所以要先算,第一个小括号运算完成后z为4,第二个小括号运算完后z为5。
两次++运算完后,因为是同一个变量,再内存中只有一份,所以前面括号的值和后面括号的值都为5,再做中间的加法运算,此时就成了5+5,所以结果是10。意思是说是同一个变量在内存中只有一份,所以c的值应该是5+5=10;之后我把代码改至如下:
#include<iostream.h>
void main()
{
int z= 3;
int c=0;
c = (++z) + (++z)+(++z) ;
cout<<c<<endl;
cout<<z<<endl;
}
按照上面答案的分析:第一个小括号运算完成后z为4,第二个小括号运算完后z为5,那么第三个小括号算完后z的值为6,三次++运算完后,因为是同一个变量,在内存中只有一份,所以前面括号的值和后面括号的值都为6,再做中间的加法运算,此时就成了6+6+6,所以结果是18。
但是在VC6.0下面运行的结果是16。这下就不明白了,大家能否告诉我,这具体执行的过程。 C
[解决办法]楼主请看本版置顶帖,我给你总结如下:
1.这类问题没有任何意义,因为C标准里面没有规定这个表达式会得到什么结果,编译器有权自己决定计算顺序,不同的编译器可以得到不同的结果,也就是说,你所看到的书上的这类题目,都是错题
2.即使结果是确定的,也不需要纠结这类题,这跟打基础没关系,因为这样的语句是绝对不应该出现在实际程序里的,属于非常差的代码,跟“茴字的四种写法”一样,完全是卖弄