ポインタ

「ポインタ」の編集履歴(バックアップ)一覧に戻る

ポインタ - (2008/02/14 (木) 00:49:08) のソース

*ポインタ
**ポインタとは
ポインタとは、値のアドレスを保持するための変数です。

**ポインタの宣言
ポインタ型を表すには、「*」を使います(*はクリーネスターとかいうこともあります)。
 int * ptr_int; /* ptr_int は int 型の値へのアドレスを保持するポインタ */
 int ** ptr_ptr_int; /* ptr_ptr_int は int 型のポインタのポインタ */

**値とアドレス
すべての値にはアドレスが存在します。勿論ポインタにも存在します。
アドレスとはその値の存在する場所を表す整数値です。
アドレスを取り出すにはアドレス演算子「&」を使います。
 int num = 0;
 int *ptr = #
アドレスのさしている値を取り出す時は、間接演算子「*」を使います。
 *ptr = 1; /* num には 1 が代入される。ptr 自体は変化しない */

**関数ポインタ
関数のアドレスを保持するポインタを、関数ポインタと呼ぶ。
これにより、関数の実体を持ち運ぶことはできないが、それを擬似的に再現することができる。
(実体を持ち運ぶ必要性はほとんどの場合ないのでこれで充分)
int 型の引数を取り、int 型を返す関数のポインタは以下のように宣言される。
 int (*func_ptr)(int);
以下のように使用する。
 int add_one(int n){ return n + 1; }
 int (*func_ptr)(int);
 func_ptr = &add_one;
 int i = (*func_ptr)(1); /* i には 2 が代入される */
関数のアドレスは、アドレス演算子を使わなくても得る事ができる。
また、関数ポインタ越しに関数を呼ぶこともできるため、上のコードは以下のように書き換えることができる。
 func_ptr = add_one;
 int i = func_ptr(1);
初心者は分からなくてもいいです。
ゲームプログラミングにおいては、タスクシステムなどで使用することはあるものの、なければならないということはないです。