C++関数呼び出し時のパラメータの伝達方式に問題が発生
823 ワード
#include
using namespace std;
int main()
{
void swap(int *, int *);
int *pointer_1, *pointer_2, a, b;
cin >> a >> b;
pointer_1 = &a;
pointer_2 = &b;
if(a < b)
swap(pointer_1, pointer_2);
cout << "max=" << a << " min=" << b << endl;
return 0;
}
void swap(int *p1, int *p2)
{
//int *temp;// p1、p2
//temp = p1;
//p1 = p2;
//p2 = temp;
int temp = *p1;// a、b (*p1 = a, *p2 = b)
*p1 = *p2;
*p2 = temp;
}
上の例を見ると、実参についてはpointer_1、pointer_2 2つのポインタは値伝達に属し、パラメータp 1、p 2のポインタが指すアドレスを変換することは実パラメータの2つのポインタに影響を与えない.
ただし,a,bについてはアドレス伝達(pointer_1=&a,pointer_2=&b)に属するため,パラメータ*p 1,*p 2(*p 1=a,*p 2=b)を変換すると実パラメータa,bに影響を及ぼす.
だから:分からないことがあったら自分で叩いて、基礎の部分はあいまいな点が存在してはいけません!