9

重複の可能性:
malloc の結果をキャストしますか?

malloccallocの型キャストの理由を見つけるためにグーグルで調べていました。しかし、mallocの型キャストはvoid ポインターを返すため不要であることがわかりましたが、 callocはどうですか。これはcallocも同じ理由です???

さて、最初のポイントに戻ると、 malloccallocの戻り値について。次に、両方が割り当てられたスペースを返していることがわかりました。だから、私はここで少し混乱しています。だから、私の質問は

  1. malloccallocの戻り値は何ですか

  2. malloccallocを型キャストする必要がありますか。なぜ ?

4

4 に答える 4

12

mallocとcallocの戻り値は?

void( )へのポインタvoid*です。

malloc と calloc を型キャストする必要がありますか。なぜ ?

いいえ、ポインターからオブジェクトへのポインターへの変換voidは暗黙的であるためです。

C11 (n1570)、§ 6.3.2.3 ポインター
voidのポインターは、任意のオブジェクト型へのポインターとの間で変換できます。

と の両方mallocに適していcallocます。

于 2012-11-08T11:14:07.130 に答える
3

malloc()または任意のポインター型に割り当てることができるcalloc()戻り値void *.Cではvoid*、コンパイラーによって暗黙的に行われるため、型キャストする必要はありません.しかし、C ++では、型キャストしないとエラーが発生します

于 2012-11-08T11:14:34.263 に答える
1

malloc() と calloc() の戻り値は何ですか?

void *malloc(size_t size);
void *calloc(size_t nmemb, size_t size);

void*両方の関数によって返されます。

malloc と calloc を型キャストする必要がありますか。なぜ ?

いいえ、タイプキャストする必要はありません。malloc()および関数はcalloc()、任意の種類の変数に対して適切に配置された、割り当てられたメモリへのポインターを返します。エラーの場合、これらの関数は を返しNULLます。 サイズが 0 の への呼び出しが成功した場合、またはサイズが 0 の のNULL呼び出しが成功した場合にも返されることがあり ます。malloc()calloc()nmemb

于 2012-11-08T11:13:14.903 に答える
1

mallocとの戻り値はcallocですvoid*。これらの関数によって割り当てられたヒープ メモリ空間のアドレス。

どちらの関数もメモリを割り当てます。それらの唯一の違いは、

  • malloc は単にメモリを割り当てます。
  • calloc はメモリを割り当て、0 に初期化します。

C では、これらの関数の戻り値をキャストすることはお勧めしません。

C++ ではキャストが必須です。

于 2012-11-08T11:15:59.517 に答える