给定内存分配:
struct typeA *p = malloc(sizeof(struct typeA));
然后某个地方,例如,在一个函数中,有两个选择:
void func(void *q)
{
....
free(q);
}
void func(void *q)
{
....
struct typeA *pp = (struct typeA *)q;
free(pp);
}
它们都可以,或者只是第二个可以吗?为什么呢?
答案 0 :(得分:2)
两者都可以。 free()
只关心存储在指针中的地址,并且在转换时不会改变。
答案 1 :(得分:1)
struct typeA *pp = (struct typeA *)q;
这种类型转换是不必要的。此外,free
参数的类型是指向void
的指针。因此,该函数不能知道用于访问对象*pp
的左值的类型。它只是接收一个原始指针。
答案 2 :(得分:1)
是的,是的。
当free()
正在等待void指针时,如果需要,编译器会将指针转换为void *
。