Should I explicitly cast malloc()'s return value?
This question already has an answer here:
C中的void指针可以分配给任何指针而不需要显式强制转换。
If you like the "don't repeat yourself" mindset, it should be appealing that you don't need to repeat the type name from the declaration of the variable, in the malloc()
call. Because, as folks have pointed out, you don't: pointers convert to and from void *
without loss, with the exception of function pointers.
Also, on that note, you don't need to repeat yourself with the use of sizeof
either. Your second example, when allocating a structure, can be written like this:
struct node *temp;
temp = malloc(sizeof *temp);
Which in my not so humble opinion is the best way.
Avoiding repeating yourself cuts down on the number of things you write, which in turn cuts down on the risk that any of those things are wrong.
Note the asterisk in the sizeof
argument, this means "the size of the object pointed to by this pointer", which is of course the same as "the size of the type struct node
" but without repeating the type name. This is because sizeof
computes (at compile-time!) the size of the expression that is its argument. For this case. Just like sizeof 3
computes the size of an expression of type int
, sizeof *temp
computes the size of an instance of struct node
.
Sure, you do repeat something, ie the variable name itself, but that is often a simpler expression and easier to get right, and also can be easier for the compiler to spot an error in.
C implicitly casts from and to void*
, so the cast will be done automatically. In C++ only conversion to void*
would be done implicitly, for the other direction an explicit cast is required.
上一篇: C ++