C指针:无效与其他类型

时间:2013-03-05 06:50:32

标签: pointers

为什么gcc中允许以下内容:

void **p1, **p2;

p1=*p2;

但这会产生“从不兼容的指针类型分配”错误?

char **p1, **p2;
p1=*p2;

2 个答案:

答案 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指针可以指向任何内容。