ポインタの小さな問題
問題は簡単です.2つの整形変数a,bを設定し、a,bを先に大きくしてから小さい順に出力し、ポインタで完成します.
私の最初のコードは以下の通りです.
一見して間違いないはずだが、結果は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を指すようにすれば、目的を達成することができる.
私の最初のコードは以下の通りです.
#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を指すようにすれば、目的を達成することができる.