0
void* buffer = (void*)malloc(100);

malloc() 関数の前に (void*) を付けることで、何が達成され、戻り値の型をオーバーライドしているのでしょうか?

4

3 に答える 3

6

malloc はすでに void ポインタを返しているため、何も達成されません。これは次と同等です。

void* buffer = malloc(100);
于 2012-04-14T19:57:36.123 に答える
4

への呼び出しの戻り値の型は、ポインターmallocに明示的にキャストされています。voidこれはすでに a を返しているため、一種の冗長ですが、開発者の意図を明確にするために存在している可能性があります (または、開発者が失敗しただけです)void*

于 2012-04-14T19:58:25.917 に答える
4

この特定のケースでは、何もしません。ただし、C++ は型の安全性に関して C よりもはるかに厳密であるため、通常は次の戻り値をキャストする必要がありますmalloc

void* x = malloc(100);       //OK in C/C++
int*  y = malloc(100);       //OK in C, error in C++
int*  z = (int*)malloc(100); //OK in C/C++, not recommended for C

ただし、C++ を使用しているため、代わりに使用する必要があるとは言えませんnew

于 2012-04-14T20:01:20.503 に答える