« ポインタの理解を妨げるもの 第2回 | トップページ | DXライブラリを使うプロジェクト設定のプロパティシート »

2011年5月27日 (金)

ポインタの理解を妨げるもの 第3回

「ポインタ」をあいまいにすると値渡しという基本的なことも忘れてしまいがち。

#include <stdio.h>
void twice(int *n) {
	*n *= 2;
}
int main(void) {
	int i;
	int *p;
	i = 12;
	p = &i;
	twice(&i);
	twice(p);
	printf("%d\n", *p);
	return 0;
}

アドレス演算子を使って得たアドレスを引数にしてtwice関数に渡すのは直接的だから直感的に理解できるのではないだろうか(そうでもないか?)。

9行目と12行目の関係と同じだし。

ポインタ型の変数を引数にしたとき、変数に格納されている値が関数に渡るということを忘れてはいけない。

10行目と11行目でtwice関数の仮引数nが受け取る値は等しい。

関数twiceには値のコピーが渡るのだから、関数twiceを実行しているとき、変数nと(関数twiceからは見えないけど)変数pは同時に変数iを指していることになる。

|

« ポインタの理解を妨げるもの 第2回 | トップページ | DXライブラリを使うプロジェクト設定のプロパティシート »

C/C++」カテゴリの記事

日記・コラム・つぶやき」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




« ポインタの理解を妨げるもの 第2回 | トップページ | DXライブラリを使うプロジェクト設定のプロパティシート »