はじめての 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つの 変数の アドレスを 渡すのに 使われている。