ポインタ


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

ポインタ

ポインタとは

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

ポインタの宣言

ポインタ型を表すには、「*」を使います(*はクリーネスターとかいうこともあります)。
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);
初心者は分からなくてもいいです。
ゲームプログラミングにおいては、タスクシステムなどで使用することはあるものの、なければならないということはないです。