自序自增自减的问题,有点难度!!

来源:百度知道 编辑:UC知道 时间:2024/05/11 03:05:04
#include "iostream.h"
void main()
{
int i=3;
int p;

p=(++i)+((++i)+(++i));
cout<<p<<endl;
cout<<i<<endl;

i=3;
p=(++i)+(++i)+(++i);
cout<<p<<endl;
cout<<i<<endl;
}
我在VC6.0下运行结果是:
18
6
16
6
请高手分析!!
在VC6.0下我得出的结果确实是上面的答案。后来我在BC++下编译得出的结果和你说的在VC2005下面的答案是相同的。我个人总结得出在VC6.0下是从左至右两两运算的。
如p=(++i)+(++i)+(++i); 先算得第一个(++i)为四后右得5,由于i是同一变量,第一个()的值也变为5,于是两两运算便是5+5=10,第三个()便得i为6,10+6=16。p=(++i)+((++i)+(++i)); 也是如此,只是要先算完()里面的。不好意思我没分了^_^

#include "iostream"
using namespace std;

void main()
{
int i=3;
int p;

p=(++i)+((++i)+(++i));
cout<<p<<endl;
cout<<i<<endl;

i=3;
p=(++i)+(++i)+(++i);
cout<<p<<endl;
cout<<i<<endl;
}
/*
个人以为你的输出结果应该是不准确的,建议你回去再试试。
p=(++i)+((++i)+(++i));
p=(++i)+(++i)+(++i);
这两个语句在VC2005下面是一样的
所以在VC2005下面的输出结果:
18
6
18
6
请按任意键继续. . .

所以我觉得应该是你给的答案错误。
*/

这段代码在的VC++6.0测试确实如楼主所说,
我想在VC2005上应该也确实如楼上所说,我没装所以也不知道。

但是我们可以分析这两种情况:这个例子更加充分的说明了,这样的语句在不同编译环境下的不安全性。在程序编写时要尽量预防这样的写法。