キャスト(double*)
です。_ type-name expressionという形式の式を見ると、それは「式の結果を型type-nameの値として解釈する」ことを意味します。この場合、「の結果をポインタとして解釈する」と言っています。 (
)
malloc
double
通常、ある型 ( など) のポインター値をchar *
別の型 ( など) のポインター変数に直接代入することはできないdouble *
ため、キャスト式を使用してソース値をターゲット型に明示的に変換する必要があります。1989 年の標準より前は、malloc
、calloc
、およびrealloc
すべての戻りchar *
値であるため、キャストを使用して結果を別のポインター型に割り当てる必要がありました。
このvoid *
型は、1989 年の標準で、キャストを必要とせずにさまざまなポインター型に割り当てることができる*alloc
汎用ポインター型として導入され、関数はその型の値を返すように変更されました。の結果を明示的にキャストすることは、malloc
現在では悪い習慣と見なされています。
キャスト式の型の構造は、宣言されているものの名前がないだけで、宣言の型の構造とほぼ一致します。これは、いくつかの例で説明するのがおそらく最も適切です。
int *p
p
へのポインターとして宣言しint
ます。式の結果を へのポインタにキャストするにはint
、 と書き(int *)
ます。これは、宣言から identifier を除いたものと同じp
です。
次にいくつかの例を示します。
宣言キャストタイプ
----------- ---- ----
int (*ap)[10] (int (*)[10]) intの10要素配列へのポインタ
int (*f)(void) (int (*)(void)) int を返す関数へのポインタ
char **p (char **) charへのポインタへのポインタ
繰り返しますが、キャスト式の構造は宣言の構造と同じですが、宣言されているものの名前を除いています。