繁体   English   中英

C:指向Struct中函数的指针

[英]C: pointer to a function in Struct

我正在练习在C中构建结构数据结构,并且该结构具有指向函数的字段指针。 我已经编写了以下代码,但是当我尝试使用gcc进行编译时,出现以下错误:

在函数“ main”中:custhreadsT​​est1.c:27:16:警告:来自不兼容指针类型的赋值[默认启用]

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

#include <stdio.h>
#include <stdlib.h>
#include <ucontext.h>

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;

}

您正在使用正确的语法( &是可选的)进行分配,但是您要分配的函数指针的类型与struct中的函数指针类型不兼容(您的add函数采用void * ,但是您的函数指针在struct中不接受任何参数)。

您的add函数应该只是:

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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM