pon

日常のこととグルメなことを発信しています

関数のポインタ渡しと参照渡しのちがい

みんなこんちゃ
今回は初心者にとってもっともつまずきやすい関数のポインタ渡しと参照渡しの違いについてわかりやすく説明しようと思う。

ちな、おれも初心者だから間違えていたらコメントで指摘していただけるとありがたいんご。

ポインタ渡しとは

まずポインタ渡しの例を交えて説明する

void changeNum(int*);
int main() {
    int n = 5;
    cout << "変更前" << n << endl;
    changeNum(&n);
    cout << "変更後" << n << endl;
}

void changeNum(int* n) {
    *n *= 2;
}

ちなみにこの結果は

変更前5
変更後10

となる。
関数のポインタ渡しとはその名の通り引数にポインタを渡すこと。
そんで関数の呼び出しの時にアドレスを渡してあげる。このchangeNum関数はnの値を書き換えることになる。だから書き換えた後は当然nの結果は変わってくる。

参照渡し

参照渡しの例

void swap(int&, int&);

int main() {
	int a = 1, b = 2;
	cout << "a = " << a << " b = " << b << endl;
	swap(a, b);
	cout << "a = " << a << " b = " << b << endl;
	return 0;
}
void swap(int& a, int& b) {
	int tmp;
	tmp = a;
	a = b;
	b = tmp;
}

結果は上と同じになるので省略。これは変数を引数として渡すことでその変数の値を書き換えることができる。つまり、ポインタ渡しと参照渡しは実質同じことをやっている。

で、何が違うのかというと最大の違いは呼び出すときにある。

ポインタ渡しは、呼び出す際に引数もポインタ、もしくは変数のアドレスを与えなくてはならないのに対し、参照渡しの場合、変数の名前をそのまま記入すればよいということ。

はい。以上。