为什么gcc中允许以下内容:
void **p1, **p2;
p1=*p2;
但这会产生“从不兼容的指针类型分配”错误?
char **p1, **p2;
p1=*p2;
答案 0 :(得分:3)
因为*p2
的类型为void *
,而 通用(数据)指针类型。这意味着,您可以将任何数据指针类型分配给类型为void *
的指针,还可以将void *
分配给任何类型的数据指针。所以
(some void **) = (some void *);
有效。
但是,char **
和char *
是指向不同类型的指针,它们都不是void *
,因此您无法将其分配给另一个。
答案 1 :(得分:0)
你需要:
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**
分配void*
之间的原因是因为void指针可以指向任何内容。