指针指向类型转换的意图是什么?

时间:2013-09-05 10:13:53

标签: c pointers

我看过一段分配内存池的代码。代码块中的一行说

*(char**) block = nextblock;

任何人都可以帮助将char*阻止类型转换为*(char**)吗?

1 个答案:

答案 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