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に影響を及ぼす.
だから:分からないことがあったら自分で叩いて、基礎の部分はあいまいな点が存在してはいけません!