为什么 gcc 允许以下内容:
void **p1, **p2;
p1=*p2;
但这会产生“来自不兼容指针类型的赋值”错误?
char **p1, **p2;
p1=*p2;
为什么 gcc 允许以下内容:
void **p1, **p2;
p1=*p2;
但这会产生“来自不兼容指针类型的赋值”错误?
char **p1, **p2;
p1=*p2;
因为*p2
是 type void *
,它是通用(数据)指针类型。这意味着,您可以将任何数据指针类型分配给 type 的指针void *
,也可以将 a 分配void *
给任何类型的数据指针。所以
(some void **) = (some void *);
已验证。
但是,char **
andchar *
是指向不同类型的指针,它们都不是void *
,所以你不能将一个分配给另一个。
你需要:
char **p1, **p2;
/* Make sure p2 has a valid value (i.e. points to a valid memory location) before the following statement */
p1=p2;
void**
它在被分配 a之间起作用的原因void*
是因为 void 指针可以指向任何东西。