自增++问题

发布时间:2024-05-18 17:58 发布:上海旅游网

问题描述:

void main()
{
int i=5,j=5,p,q;
p=(i++)+(i++)+(i++);
q=(++j)+(++j)+(++j);
printf("%d,%d,%d,%d",p,q,i,j);
}
为什么p的值15,q的值时24 ,请指教?谢谢了

问题解答:

你可以去看看书,这是C/C++中没有明确定义结果的。不同的编译器结果不一样。后++和前++的不同在于前++是左值,加完一返回一个变量,而后++是右值,是将数先赋给一临时变量,然后数加1,再把临时变量返给表达式。但是编译器可能把3个前++先做完也有可能顺次做(就是做完一个再做+再做++再做+……),而3个后++同样有可能顺次做,或者是3个+做完了再集体做++,因此结果因不同编译器的实现而定。C/C++语言中求值顺序,优先级,结合性是三个不同的概念,你要是有兴趣可以加200027我给你解释。

如果你使用的是VC6.0运算的话,其结果应该是如下:
i++是先自增后返回原值就是5,因此不管自增几次,p=5+5+5=15
关于q,先算前面自增2次的(++j)+(++j)这里就是(5+2)+(5+2),再后面一个(++j)自增3次就是5+3=8,因此q=7+7+8=22
如果你是在turbo C 2.0中的话,P一样,q里面就应该是这样分5+2 5+4 5+3=24了,其结果是不一样的。

看一下谭浩强的书。有解释。不同的编译器运行结果不同,这个不必深究。用VStudio C++的时候由优先级先运算后自增:p=5+5+5
q=8+8+8。也有编译器逐次加的。

对于一,二楼的解释有疑问?
在q=(++j)+(++j)+(++j)里
按照优先级来执行的话,应是先算完括号内的再算括号外的
1.j的值加了三次1,j=8
2.q=8+8+8
这样理解有错吗?

因为++在后面,其优先级最低,所以先运算,后自增
而++在前面,其优先级最高,所以先自增后运算
所以上面代码的结果为15,24,8,8

p=5+5+5
q=6+7+8

热点新闻