ポインターの宣言
「ポインター宣言」はポインター変数にオブジェクト変数小数点の種類を指定します。ポインターとして宣言された変数はメモリ アドレスを保持します。
構文
declarator:
pointer の opt 直接宣言直接宣言 :
identifier( 宣言子 )
直接宣言の [ の 定数式 opt 入力]
直接宣言 ( 型パラメーター リスト )
直接宣言 (ID リスト opt)
pointer:
この 型修飾子 * リスト optこの 型修飾子 * リスト optpointer
修飾子リスト型 :
型修飾子この型修飾子のリスト型修飾子
型指定子は 基本構造体または共用体型にすることができるオブジェクトの種類を提供します。ポインターは配列変数関数およびそのほかのポインターで参照できます。(より複雑なポインター型を宣言して解釈する方法の詳細についてはより複雑な宣言の解釈 を参照してください)。
型指定子 void を作成することによってポインターが参照するタイプ仕様が低下する可能性があります。このような項目は「 void へのポインター」と呼びます。void * として書き込まれます。void へのポインターとして宣言された変数は型のオブジェクトを参照するために使用できます。ただしポインターまたは参照する型が指すオブジェクトの多くの操作を実行すると各操作に対して明示的に指定する必要があります。(char *void* 型と型の変数を型にキャストせず互換性があります)。このような変換は型キャストを使用できます (詳細については変換を型に展開します を参照してください。
型修飾子は 定数 または volatileまたはその両方に使用できます。これらはポインターがプログラム自体によって 定数 () を変更することができないかポインターが volatile プログラム () を超えるプロセスによって適切に変更できそれぞれ指定します。( 定数 と volatile の詳細については 型修飾子 を参照してください)。
declarator は変数に型修飾子を含めることができます。たとえばdeclarator で配列を表す場合ポインターの型は配列へのポインターであるように変更されます。
構造体共用体または列挙型を定義する前に構造体共用体または列挙型へのポインターを宣言できます。次の例に示すように構造体または共用体のタグを使用してポインターを宣言します。このような宣言はポインター変数の領域を割り当てるためにコンパイラによって構造体または共用体のサイズを知る必要がないため使用できます。
例
次の例ではポインターの宣言について説明します。
char *message; /* Declares a pointer variable named message */
char の変数への message ポインターの位置を示します。
int *pointers[10]; /* Declares an array of pointers */
pointers の配列に 10 個の要素があります。; 各要素は int の型の変数へのポインターです。
int (*pointer)[10]; /* Declares a pointer to an array of 10 elements */
10 個の要素を含む配列へのポインター変数のポインター。この配列の各要素に int の型があります。
int const *x; /* Declares a pointer variable, x,
to a constant value */
x ポインターに別の値 int にポイントしますが値を指すように変更できますが変更できません。
const int some_object = 5 ;
int other_object = 37;
int *const y = &fixed_object;
int volatile *const z = &some_object;
int *const volatile w = &some_object;
これらの宣言の変数の y は int の値への定数ポインターとして宣言されています。指す値に変更できますポインター自体は同じ場所に常に示す必要があります : fixed_object のアドレス。同様にz は定数ポインターですが値をプログラムで変更することができない int を指すように宣言されています。z が指すプログラムによって 定数 int の値は変更できませんがプログラムとして実行しているプロセスによって適切に変更できる指定子を追加 volatile に示します。w の宣言はプログラムが指す値を変更できないとプログラムがポインターを変更できないことを指定します。
struct list *next, *previous; /* Uses the tag for list */
この例では構造体の型 list を指すポインター変数 next 2および previous を宣言します。この宣言は list の種類の定義に宣言と同じ表示できる限り前に list の構造体の定義 (次の例を参照) で使用できます。
struct list
{
char *token;
int count;
struct list *next;
} line;
可変 line に list という構造体の型があります。list の構造体の型に 3 個のメンバーがあります : 最初のメンバーは char の値へのポインターです int 2 番目の値でありその次は list の別の構造体へのポインターです。
struct id
{
unsigned int id_no;
struct name *pname;
} record;
可変 record構造体の型 id があります。pname が name という名前の別の構造体の型へのポインターとして宣言されることに注意してください。この宣言は name の型を定義前に使用できます。