C++ 自增自减

来源:百度知道 编辑:UC知道 时间:2024/05/14 10:38:26
main()
{
int i=5,j=5;

cout<<(++i)+(++i)+(++i)<<endl;
cout<<(++j)+((++j)+(++j))<<endl;
cout<<((++j)+(++j)+(++j))<<endl;
}
如上。输出结果是22,24,31。请高手解释。
目的在于搞清自增自减机制,请勿作无建设性回答。在线等

这里其实解释一句你就明白了

cout<<(++i)+(++i)+(++i)<<endl;
i开始是 5 进入程序后 i 首先加1 所以 就是 ++i)+(++i) +(6)
然后,你想。 i到了下一个后。 i自身在加1 就是 (++i) + 7 + 6
同理, 就是 8+7+6
其实你知道这个道理就好
结果 取决于你用的编译器,但是道理是一样的。
在VC 2008上结果是

24
24
33

前2个应该是一样的,因为第2行你的代码初值是一样的。

不知道你用的是那个编译器。 建议你写成

#include <iostream>

using namespace std;

int main()
{
int i=5,j=5;

cout<<(++i)+(++i)+(++i)<<endl;
cout<<(++j)+((++j)+(++j))<<endl;
cout<<((++j)+(++j)+(++j))<<endl;
return 0;
}

遇到垃圾教材上的这种脑残题,请无视之.

好无聊的问题啊!谁会写这么恶心的代码?

这种代码和编译器是相关的,不同的编译器结果可能就不同,所以很多专家建议,i++,j--这种语句最好单独成一句,不要放在别的语句中。

你的想法很好,但是C语言的标准委员会并不支持你。

C语言的标准中特别规定了这种行为是不确定的行为。
标准中规定:
i++的值是i
++i的值是i+1
并且明确说明了,增量的生效时间是在本次取值之后,
本个表达式执行完成的任何时间。

举例说明
i=5;
j=(i++)+(i++);
就可以是10或者11,但是定义为不确定行为。类似