変数を定義または宣言する場合は、変数の型の後に変数名を指定します。したがって、タイプの変数が必要な場合は、wordlist
次を使用します。
wordlist myVariable;
変数を変数型へのポインターに指定する場合は、変数名の前にアスタリスクを付けます。そのため、型の変数へのポインターである変数が必要な場合は、次のwordlist
ように使用します。
wordlist *myVariable;
ほとんどの経験豊富な C プログラマーが変数名にアスタリスクを付ける理由は、次のような理由によるものです。
wordlist myVariable, *pVariable1, myVariable2, *pVariable2;
上記により、4 つの変数が作成されます。 myVariable
タイプwordlist
です。myVariable2
タイプwordlist
です。 pVariable1
とpVariable2
へのポインタ型wordlist
です。
したがって、アスタリスクは、変数が指定された型ではなく、指定された型へのポインターであることを示す、変数名宣言の一種の形容詞、修飾子、または修飾子として機能します。
結合された変数の定義は、次の 4 行の定義と同じです。
wordlist myVariable; // declares a variable of type wordlist
wordlist *pVariable1; // declares a pointer to a variable of type wordlist
wordlist myVariable2; // declares a variable of type wordlist
wordlist *pVariable2; // declares a pointer to a variable of type wordlist
関数の定義/宣言も同様に機能します。
wordlist *myFunc (void) {
wordlist *myNew = malloc (sizeof(wordlist));
if (myNew) {
// set up myNew stuff
}
return myNew;
}
編集:関数ポインタ
関数ポインターを含む変数を指定することもできます。たとえば、上記の myFunc() の場合、次のように指定できます。特定の評価順序を強制するために括弧を使用していることに注意してください。つまり、pFunc は、引数を受け入れず (void 引数リスト)、wordlist 変数へのポインターを返す関数へのポインターです。C には演算子と修飾子の優先順位に関する規則がありますが、式が複雑になるにつれて、通常は括弧を使用して評価順序を強制する方が適切です。プログラムをデータとして見る: 関数ポインタ
wordlist *((*pFunc) (void)) = myFunc; // pointer to a function that returns a pointer to a wordlist