我应该明确地施放malloc()的返回值吗?
我想问一下下面的情况:
char *temp; temp = malloc(10);  由于malloc的返回types是void* , malloc返回的指针是否会在被分配给temp之前被隐式转换为char*types? 标准在这方面说了什么? 
如果我们的指针variables是一些结构types,例如:
 struct node *temp; temp = (struct node *)malloc(sizeof(struct node)); 
 如果我们将内存分配给temp而不将其转换为struct node*types,是否将其隐式转换为struct node*types,还是需要将其显式转换为struct node* type? 
C中的void指针可以分配给任何指针而不需要显式的强制转换。
 如果你喜欢“不要重复自己”的思维方式,那么应该有吸引力,你不需要从malloc()调用中的variables声明中重复types名称。 因为,正如人们已经指出的那样,你不会指针转换为void *而不会丢失,除了函数指针。 
 另外,在这个说明中,你不需要重复使用sizeof 。 你的第二个例子,当分配一个结构,可以这样写: 
 struct node *temp; temp = malloc(sizeof *temp); 
在我这么不谦虚的意见中是最好的办法。
避免重复自己,减less了你写的东西的数量,从而减less了这些事情都是错误的风险。
 请注意sizeof参数中的星号,意思是“这个指针指向的对象的大小”,当然这和“ struct node的大小”一样,但不重复types名称。 这是因为sizeof计算(在编译时!)作为其参数的expression式的大小。 对于这种情况。 就像sizeof 3计算inttypes的expression式的大小一样, sizeof *temp计算struct node的一个实例的大小。 
当然,你可以重复一些东西 ,也就是variables名本身,但是这通常是一个简单的expression式,并且更容易得到正确的结果,编译器也可以更容易地发现错误。
  C隐式地转换为void* ,所以这个转换将自动完成。 在C ++中,只有向 void*转换才会隐式完成,而对于另一个方向则需要显式强制转换。 
 在C ++中,你必须明确地施放,但这实际上只是告诉你这样做的语言。 
 在c中没有任何需要强制转换,内存只是内存 – 我将不得不做一个search,看看最新的C标准是否需要它。