谁来解释一下这个C程序的运行结果?
#include <iostream.h>
void main()
{
int s[3]={1,2,3};
int *p;
p=&s[0];
cout<<*p<<", "<<*(p++)<<", "<<*(p++)<<", "<<endl;
cout<<*p<<", "<<*(p++)<<", "<<*(p++)<<", "<<endl;
}
#include <iostream.h>
void main()
{
int s[3]={1,2,3};
int *p,x;
p=&s[0];
x=*p+*(++p)+*(++p);
cout<<x<<endl;
p=&s[0];
cout<<*p<<", "<<*(++p)<<", "<<*(++p)<<", "<<endl;
}
//x的值为什么跟3个p值不相对应?
第一个差不多懂了,可我上机第二个程序运行结果是
7
3,3,2
不明白啊..按照从右向左加了1再输出怎么不是3,2,1了,还有那和怎么不是8了, 再给讲讲清楚吧~~ 我用的是vc6.0啊,编译器不至于犯这样的错误吧...
这两个程序貌似都差不多
我就只讲上面那个吧
不明白的话,再说
cout<<*p<<", "<<*(p++)<<", "<<*(p++)<<", "<<endl;
在编译的时候 是 从右向左看的
所以先做改握p++》》p++》困歼衡》p
对应于s[0]是s[0]>>s[1]>>s[2]
cout<<s[2]<<s[1]<<s[0];
所以输出为3 , 2 , 1
综上,我估计第二个cout的结果应该汪做是
不确定》》不确定》》3
吧
不知道楼主重写过>>
因为cout一次只能输出一个
即:cout<<s[2]然后再返回cout输出cout<<s[1]
这个加上括号为
((cout<<s[2])<<s[1])<<s[0];
然而,对于+运算时
( *p+*(++p) )+*(++p);
先做*p+*(++p)
结运弊灶果分卜凯别是:
1,旁扮1,2
3,3,*
6
1,2,3
++p先加后用 p++先用后加
不是对应的么?
+号放前面先加1再输出
+号放后面先输出再加1
并且计算是从右向左的
一个计算公式里要么算了再加1,要么轮余加1后再算,优先级雀培的问题
第腊岁滚一个的结果:
3,2,1
不定,不定,3
第二个的结果:
9
3,3,3
楼主运行结果不对吧,什么版本的编译器....
我在2008,2010下运行都是我的结果啊
忘得差不多了,但是++p和p++应该像一楼说的一个事先加后用,一个是先用后加