问题很简单:设置两个×××变量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,即可达到目的。