About pointer
About pointer
pointerについて int i = 0; これは int型の iという入れ物を宣言して 0という数値を格納. int *pi; int型のアドレスを格納する入れ物, int型の 入れ物の場所を格納するための入れ物という意味。 なのでpointerと呼ばれる pi = &i; iの入れ物自身の場所(address)を pi という 入れ物に格納. //piに格納されているアドレスの先の値を表示する printf("i = %d\n", *pi); //piに格納されているアドレスを表示 printf("pi = %p\n", pi); //iのアドレスを表示 printf("&i = %p\n", &i);
実行結果
i = 0 pi = 0012FED4 &i = 0012FED4
例 swap
よくある例ですが void swap(int x, int y); void swap(int *x, int *y); この2つは結果がことなります void swap(int x, int y) { int tmp; tmp = x; x = y; y = x; } void swap(int *x, int *y) { int tmp; tmp = *x; *x = *y; *y = *x; } int x = 3; int y = 5; printf("swap(&x, &y) before x = %d, y = %d\n", x, y); swap(&x, &y); printf("swap(&x, &y) after x = %d, y = %d\n", x, y); printf("swap(x, y) before x = %d, y = %d\n", x, y); swap(x, y); printf("swap(y, y) after x = %d, y = %d\n", x, y); 結果 x,yのアドレスをswapに渡す swap(&x, &y) before x = 3, y = 5 swap(&x, &y) after x = 5, y = 3 結果swap内で 外側のスコープの x, yの値が変更される x,yの値をswapに渡すことになる swap(x, y) before x = 5, y = 3 swap(x, y) after x = 5, y = 3 結果、swap内のローカル変数x, yが変更されるだけで swapのスコープから外れた後は x, yの状態は変更なし