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