我应该明确地施放malloc()的返回值吗?

这个问题在这里已经有了答案:

  • 我输入malloc的结果吗? 27个答案

  • C中的void指针可以分配给任何指针而不需要显式强制转换。


    如果你喜欢“不要重复自己”的思维方式,那么应该有吸引力,你不需要在malloc()调用中重复变量声明中的类型名称。 因为,正如人们已经指出的那样,你不需要:除了函数指针之外,指针可以毫无损失地转换成void *void *

    另外,在该说明中,您不需要重复使用sizeof 。 你的第二个例子,当分配一个结构时,可以这样写:

    struct node *temp;
    temp = malloc(sizeof *temp);
    

    在我不那么谦虚的意见中是最好的方法。

    避免重复自己,可以减少你写的东西的数量,从而减少任何这些错误的风险。

    请注意sizeof参数中的星号,这意味着“该指针指向的对象的大小”,当然这与“ struct node的大小”相同,但不重复类型名称。 这是因为sizeof计算(在编译时!)作为其参数的表达式的大小。 对于这种情况。 就像sizeof 3计算int类型的表达式的大小一样, sizeof *temp计算struct node的大小。

    当然,你确实重复了一些东西,比如变量名本身,但这通常是一个更简单的表达式,更容易正确使用,编译器也可以更容易地发现错误。


    C隐式地从和转换为void* ,所以这个转换将自动完成。 在C ++中,只有转换为void*才会隐式完成,而对于另一个方向则需要显式强制转换。

    链接地址: http://www.djcxy.com/p/28349.html

    上一篇: Should I explicitly cast malloc()'s return value?

    下一篇: How does the global variable declaration solve the stack overflow in C?