问题很简单:设置两个×××变量a,b,并按先大后小顺序输出a,b,用指针完成。
我第一次的代码如下:
#include<iostream> 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<<endl; return 0; }
乍看一眼应该没错,然而结果却是 18 18 。
大惑不解,仔细分析方才明白:在if 条件判断内,"p1=p2"使p1与p2均指向变量b,但接下来"*p2=c"一句却改变了 p2所指变量的值,即改变了b的值,使之等于18,故最后会输出两个18。
将第12行改为"p2=&c",使p2指向变量c,即可达到目的。