0

重複の可能性:
malloc の結果をキャストしますか?
malloc のベスト プラクティスは何ですか?

私はC言語が初めてで、クラスで説明されたように質問があります:

malloc() によって返されるポインターの型は void * であるため、必要な型にキャストする必要があります。

つまり、私はする必要があります:

char *str;
str = (char *) malloc(14);

よくわかりませんが必須ですか?malloc がその void ポインターを返すとしましょう。キャストを行わずに多くの例が見られるのはなぜですか? 例:

float *arr = malloc (20 * sizeof (float));

誰か説明してください:)?

4

1 に答える 1

1

C では、このキャストは必要ありません。変換は確かに暗黙的です。

C11 (n1570)、§ 6.3.2.3 ポインタ

へのポインターvoidは、任意のオブジェクト型へのポインターとの間で変換できます。任意のオブジェクト型へのポインターは、void へのポインターに変換され、再び元に戻される可能性があります。結果は元のポインタと等しくなります。

不要なのでキャストmallocリターンの有無は別問題(こちら参照)。

于 2013-01-19T13:30:25.167 に答える