分类: C/C++
2014-01-02 17:49:43
问题很简单:设置两个整形变量a,b,并按先大后小顺序输出a,b,用指针完成。
我第一次的代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#include
using namespace std;
int main()
{
int a=18,b=20,c;
int *p1,*p2;
p1=&a;
p2=&b;
if(*p1<*p2){
c=*p1;
p1=p2;
*p2=c;
}
cout<<*p1<<' '<<*p2<
return 0;
}
|
乍看一眼应该没错,然而结果却是 18 18 。
大惑不解,仔细分析方才明白:在if 条件判断内,"p1=p2"使p1与p2均指向变量b,但接下来"*p2=c"一句却改变了 p2所指变量的值,即改变了b的值,使之等于18,故最后会输出两个18。