ポインタ宣言
ポインタ:インデックス への移動
ポインタは,その型が void(何を指してもよいことを意味する)であっても,なんらかの特定の型へのポインタとして宣言しなければなりません。ただし,一度宣言を行えば,通常は別の型のオブジェクトを指すように再代入を行うことができます。コンパイラでは,このような型変換なしのポインタの代入が可能ですが,ポインタが void へのポインタとして宣言されていない場合は,コンパイラが警告を発します。void* ポインタを void* 以外のポインタへ代入することは,C では可能ですが,C++ では不可能です。詳細については,void 型を参照してください。
警告 ! ポインタを使用する前に,必ずポインタを初期化してください。
type が,定義済みの型あるいはユーザー定義型(void も含む)である場合,宣言は次のようになります。
type *ptr; /* 初期化されていないポインタ */
これは,ptr を「type へのポインタ」型として宣言しています。すべてのスコープ,持続期間および可視性に関する規則が,宣言された ptr オブジェクトに適用されます。
ヌルポインタ値は,プログラムで使用されているすべての有効なポインタと異なっていることが保証されているアドレスです。ポインタに整数定数 0 を代入すると,そのポインタにヌルポインタ値を代入したことになります。
定数シンボル NULL(stdio.h などの標準ヘッダーファイルで定義されてる)は,正当に使うことができます。すべてのポインタに対して,NULL と等しいか,あるいは等しくないかを調べることができます。
「void へのポインタ」型のポインタを,ヌルポインタと混同してはいけません。この型の宣言は次のようになります。
void *vptr;
これは vptr が,すべての「type へのポインタ」値(ヌルも含む)を代入できる汎用のポインタであると宣言しています。type1 と type2 が異なる型の場合に,「type1 へのポインタ」と「type2 へのポインタ」の間で,適切な型変換なしに代入を行うと,コンパイラは警告あるいはエラーを発します。type1 が関数で type2 は関数でない(あるいはその逆の)場合,ポインタの代入は不正です。type1 が void へのポインタの場合は型変換は不要です。type2 が void へのポインタの場合,C では型変換は不要です。