gpt4 book ai didi

c - C 中不兼容的指针类型

转载 作者:行者123 更新时间:2023-12-01 16:06:18 26 4
gpt4 key购买 nike

所以我尝试将类型 double * 传递给接受 void ** 作为参数之一的函数。这是我收到的警告。

incompatible pointer type passing 'double **' to parameter of type 'void **'

这是我的代码片段。

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

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

这是函数的原型(prototype)声明。

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 * 对象,因为这些有特殊规则。

关于c - C 中不兼容的指针类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16160799/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com