C中不兼容的指针类型

时间:2013-04-23 04:11:40

标签: 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 );

我认为如果我将目标作为两级指针传递它会起作用,但我想我错了。有人可以向我解释为什么我会收到这个警告?

3 个答案:

答案 0 :(得分:5)

即使所有其他指针类型都可以在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 *对象,因为这些对象有特殊规则。

答案 1 :(得分:0)

在原型声明中,您说第二个参数为void**,因此您必须输入强制转换double**void**。 而不是这一行success = dequeue(queueIn, &target);

像这样调用success = dequeue(queueIn,(void**) &target);

答案 2 :(得分:-1)

int main( void )
{
    //  Local Declaration
    double *target;

   //   Statement
   success = dequeue(queueIn, (void**)&target);
}

像这样使用它。