ポインタの小さな問題

585 ワード

問題は簡単です.2つの整形変数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だった.
if条件判断では、p 1とp 2が変数bを指すように「p 1=p 2」を用いたが、次の「*p 2=c」の一言でp 2が指す変数の値が変化し、bの値が18に等しくなるように変化したため、最後に2つの18が出力されることが分かった.
12行目を「p 2=&c」に変更し、p 2が変数cを指すようにすれば、目的を達成することができる.