C中不兼容的指针类型
所以我试图将一个类型double *
传递给一个接受void **
作为参数之一的函数。 这是我得到的警告。
incompatible pointer type passing 'double **' to parameter of type 'void **'
这是我的代码片段。
int main( void ) { // Local Declaration double *target; // Statement success = dequeue(queueIn, &target); }
这是函数的原型声明。
int dequeue ( QUEUE *queue, void **dataOutPtr );
我认为如果我将目标作为两级指针传递它会起作用,但我想我错了。 有人可以向我解释为什么我会收到这个警告?
即使所有其他指针类型都可以在没有信息丢失的情况下转换为void *
,但对于void **
和其他指针指向类型也是如此; 如果你取消引用void **
指针,它需要指向一个真正的void *
对象1 。
在这种情况下,假设dequeue()
通过提供的指针存储它返回单个指针值,为了正式正确,你需要做:
int main( void ) { void *p; double *target; success = dequeue(queueIn, &p); target = p;
当你这样写时,从void *
到double *
的转换是显式的,这允许编译器做任何必要的魔法(即使在绝大多数情况下,根本没有魔法)。
1. …或char *
, unsigned char *
或signed char *
对象,因为对这些有特殊规则。
在你的原型声明中,你说第二个参数为void**
,所以你必须输入cast doublee**
到void**
。 而不是这一行success = dequeue(queueIn, &target);
。
像这样success = dequeue(queueIn,(void**) &target);
调用success = dequeue(queueIn,(void**) &target);
int main( void ) { // Local Declaration double *target; // Statement success = dequeue(queueIn, (void**)&target); }
像这样使用它。