我看过一段分配内存池的代码。代码块中的一行说
*(char**) block = nextblock;
任何人都可以帮助将char*
阻止类型转换为*(char**)
吗?
答案 0 :(得分:0)
我想不出除了代码可读性之外应该进行这种类型转换的原因。
允许取消引用void**
指针,我的gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-52)
甚至不会不满意,gcc -pedantic dereferencetest.c
struct StructTest {
char* ptr;
};
int main(void)
{
char* str = strdup("test");
char** ptr = &str;
void** vptr = ptr; // warning here
char* strRecycled = *vptr; // no warning on dereferencing
printf("str=[%s]", strRecycled);
{
struct StructTest val;
struct StructTest* structPtr = &val;
struct StructTest** structPtrPtr = &structPtr;
vptr = structPtrPtr; // warning here
structPtr = *vptr; // no warning on dereferencing
}
return 0;
}
有关于无效指针类型分配和初始化的警告,但没有解除引用警告。
dereferencetest.c:9: warning: initialization from incompatible pointer type
dereferencetest.c:20: warning: assignment from incompatible pointer type