はじめての C
[Learning GNU C]
5.3. 関数の 引数 argument としての ポインタ
ポインタの すばらしい ところの 1つが 変数を -- それ自身の 有効範囲 scope の外側から -- 関数により 交換 swap させられることだ。 関数に ポインタを 渡すことで 変数が 保持する データの 読み/書きが 可能になる。 例えば 関数を 書いて 2つの 変数の 値を 交換することが できる。 ポインタが なければ それは 実際 不可能だ。 どう ポインタを 使うかが これだ。
Example 5-2. swap_ints.c
#include <stdio.h>int swap_ints(int *first_number, int *second_number);
int
main()
{
int a = 4, b = 7;
printf("pre-swap values are: a == %d, b ==%d\n", a, b);
swap_ints(&a, &b);
printf("post-swap values are: a == %d, b == %d\n", a, b);
return 0;
}
int
swap_ints(int *first_number, int *second_number)
{
int temp;
/* temp = "what is pointed to by first_number; etc ... */
temp = *first_number;
*first_number = *second_number;
*second_number = temp;
return 0;
}
見てのとおり swap_ints() を 宣言して 2つの ポインタ (変数の アドレス) の 要求を GCC に 知らせる。 また その値に 代わって 演算子 (&) の アドレスが swap_ints() で 読まれ 2つの 変数の アドレスを 渡すのに 使われている。