在 C 中出现错误:从不兼容的指针类型传递函数的参数 1

Getting an error in C: passing argument 1 of function from incompatible pointer type

函数签名是

void abort(context_t **ctx);

,其中 ctx 是另一个结构的 属性。

在我创建了一个指向主结构(server_t *server)的指针之后,我可以毫无问题地将指针传递给指向主结构(**server)的指针,使用指针其属性如下:(*server)->ctx(*server)->addr,等等

但我不知道如何将 **ctx 直接传递给函数,而不传递 **server。如果我尝试使用 abort(&server->ctx),我会得到一个错误:

error: passing argument 1 of ‘abort’ from incompatible pointer type: abort(&server->ctx);

note: expected ‘context_t ** {aka struct context_t **}’ but argument is of type ‘struct context_t *’

void abort(context_t **ctx);

note: expected ‘context_t ** {aka struct context_t **}’ but argument is of type ‘struct context_t *’

您似乎试图将指针分配给双指针。你可以试试:

context_t * temp_ctx = &server->ctx;
abort(&temp_ctx);

编译错误可以通过以下代码行修复:

/* declare context_t* pointer variable on the appropriate scope */
/* based on how **ctx is used by abort() */
context_t *pContext;

/* .... */

/* assign the pointer */
pContext = &server->ctx;

/* now pass the context_t** or "the address of pContext" to abort() */
abort(&pContext);