C:指向Struct中函数的指针

我正在练习在C中构建一个struct数据结构,struct有一个指向函数的字段指针。 我写了下面的代码,但是当我尝试用gcc编译时,我收到以下错误:

在函数’main’中:custhreadsT​​est1.c:27:16:警告:从不兼容的指针类型分配[默认启用]

什么是在我的结构中为函数指针分配指针字段的正确方法? 非常感谢!

#include  #include  #include  typedef struct { ucontext_t (*gt_context); void (*function)(void *); int status_flag; } custhread_t; void *add(void *) { // do something here } int main(void) { ucontext_t ctx_main; getcontext(&ctx_main); custhread_t th1; th1.gt_context = &ctx_main; th1.function = &add; th1.status_flag = 1; return 0; } 

您使用正确的语法( &是可选的)分配它,但是您分配的函数指针的类型与结构中的函数指针类型不兼容(您的add函数采用void * ,但结构中的函数指针)不接受任何争论)。

你的addfunction应该只是:

 void add(void) { // do something } 

或者,如果你的add函数确实将一个指向void的指针作为参数,那么:

 typedef struct { ucontext_t (*gt_context); // pointer to a function that takes a void pointer, no return value void (*function)(void *); int status_flag; } custhread_t; void add(void *somePointer) { // do something with somePointer } 

因此,如果你的add函数接受并返回一个void指针,那么:

 typedef struct { ucontext_t (*gt_context); // pointer to a function that takes and returns a void pointer void *(*function)(void *); int status_flag; } custhread_t; void *add(void *somePointer) { // do something with somePointer // return a void pointer } 

你做得对。 只需确保函数指针类型匹配即可。 例如,从结构中删除’*’,以便参数只是void而不是void指针。 像这样。

 typedef struct { ucontext_t (*gt_context); void (*function)(void); int status_flag; } custhread_t;