C++学習ノート---ポインタ2

1073 ワード

ポインタパラメータに関する注意事項:
ポインタパラメータの値を変更することによって、ポインタの実パラメータの値を変更しようとしないでください.次のコードを見てください.
#include <iostream>

void swap(int * p1, int * p2);

int main() {

	int a = 5, b = 9;
	int * pa, * pb;
	pa = &a;
	pb = &b;
	if(a < b) swap(pa, pb);

	std::cout << a << ' ' << b <<std::endl;

    return 0;
}

void swap(int * p1, int * p2) {
    int * temp;
    temp = p1;
    p1 = p2;
    p2 = temp;
}
出力は依然として:5 9
9 5を入力するには、次のようにします.
#include <iostream>

void swap(int * p1, int * p2);

int main() {

	int a = 5, b = 9;
	int * pa, * pb;
	pa = &a;
	pb = &b;
	if(a < b) swap(pa, pb);

	std::cout << a << ' ' << b <<std::endl;

    return 0;
}

void swap(int * p1, int * p2) {
    int temp;
    temp = * p1;
    * p1 = * p2;
    * p2 = temp;
}

C/C++における実パラメトリック変数と形パラメトリック変数との間のデータ伝達は一方向値伝達であるからである.ポインタ変数を即時に使用してパラメータを作成するにも、このルールに従います.
関数を呼び出すことで実パラメトリックポインタ変数の値を変更することはできませんが、実パラメトリックポインタ変数が指す値を変更できます.