C++中的自增自减问题

发布时间:2024-05-28 10:52 发布:上海旅游网

问题描述:

main()
{
int i=5,j=5,p,q;
p=(i++)+(i++)+(i++);
q=(++j)+(++j)+(++j);
printf("%d,%d,%d,%d\n",p,q,i,j);
}

书上输出的是 15,24,8,8
我自己运行的是15,22,8,8
哪位高手解释下哪个正确怎么来的。初学 详细点 谢谢了

问题解答:

你的答案是正确的,可能是书上错误,因为任何不明白的程序都可以用实际运行来得到明朗的结果。

首先,p=(i++)+(i++)+(i++);i是先用后加型,也就是说在这条语句中:3个(i++)都是5,所以p = 15;其中的i不变成6,7,8 是因为这条语句还没有结束,只到最后语句执行完成时i = 8;

而在q=(++j)+(++j)+(++j);j是先加后用型,即第一个(j++)= 6,此时,j=6;
第二个(j++)=7,此时j=7;第三个(j++)= 8,此时j = 8;所以q = 22.

此为小辈之见,水平有限,欢迎拍砖!

....题抄错没。。我拿你这程序在VC6.0上去调试。和你得的答案一样。。

你说的那本书的作者应该是想说明
i++ 那么i先计算 再自增吧 于是i=5来计算 为15
++j 则先自增 再计算 于是j=8 来计算 8+8+8为24

但实际上编译器并不是这么做的
(++j)+(++j)+(++j)
这个计算 我以自右向左结合顺序来计算
编译器把它拆成了两个式子 (++j)+ ((++j)+(++j))
在计算右边的时,很简单((++j)+(++j))
,加号两加先计算++j 这时的结果 当然就是 7+7

然后再计算 (++j) + (7+7 )
就是 8+7+7=22

如此是没有任何意义的 这是仅从编译器角度来看
因为C++/C在这方面并没有规定,所以各个编译器的运算结合方式都不尽相同
这种式子在编程过程中一定要避免!!!

本题没有意义 这没有对与错
我不知道你看的是什么书 那本书一定是国内的作者
建议换书吧,由此可知那本书很差

首先这种代码是必须严格避免写出来的
这种代码就算最后结果是正确,但一定要否定它

这个问题不大容易理解。我说可能不大明白。
不知道你是不是用的中国铁道出版社的《C语言程序设计》这本教材。
P45有专门的讲解。
大概如下:
在该程序段中,对p=(i++)+(i++)+(i++);应理解为3个i相加,故p值为15.
然后i自加1,三次累加之后i=8(对于这一点我的理解是(小括号优先级高)i先参与运算即p=5+5+5;运算完p再运算自加如果不运算p则自加运算也不执行。然后3次自加得到8..)
对于q=(++j)+(++j)+(++j);应理解为j先自加1,在参与运算,由于j自加3次后值为8,故q就为3个8相加为24.
备注:你的程序我运行的结果是标准答案 用TC2.0编译器

j只是一个变量,所以我认为同一个式子里不可能有3个值同时等于j
那么就是j自增了三次然后得出j的值
这个可能是编译器的问题,不过我觉得理论上应该是24;

都没错。
你可以分别用dev,vc,vs,eclipse调试下,答案都不同

热点新闻