Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
给定内存分配:
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); }
他们两个都可以,还是只有第二个可以?为什么?
两者都可以。free()只关心存储在指针中并且在转换时不会改变的地址。
free()
struct typeA *pp = (struct typeA *)q;
这种类型转换是不必要的。此外,free参数的类型是指向void. 因此,该函数无法知道用于访问对象的左值的类型*pp。它只接收一个原始指针。
free
void
*pp
是的。
与free()等待 void 指针一样,void *如果需要,编译器会将指针转换为。
void *