如何在结构中调用函数指针?

时间:2018-03-16 03:55:02

标签: c

我正在使用c中的xinu嵌入式操作系统。我创建了一个新的头文件并声明了一个struct:

struct callout {
   uint32 time;      /* Time of delay in ms */
   void *funcaddr;   /* Function pointer */
   void *argp;       /* Function arguments */
   uint32 cid;       /* Callout id for the specific callout */
   char *sample;

};

在我的主要部分中,我尝试声明一个struct对象并将funcaddr作用于一个函数。

void test();

process main(void) {
   struct callout *coptr;

   coptr->sample ="hellowolrd";
   coptr->funcaddr = &test;

   (coptr->funcaddr)(coptr->argp);    //error here
   kprintf("coptr %s \n", coptr->sample);

   return OK;

 }

 void test() {
    kprintf("this is the test function \n");
 }

我尝试通过struct调用函数指针,但是我收到一个错误: main.c:30:19:错误:被调用的对象不是函数或函数指针     (coptr-> funcaddr)();

请说明调用函数指针的正确语法。

1 个答案:

答案 0 :(得分:5)

您已将funcaddr声明为对象指针。要声明一个函数指针,它看起来像这样:

struct callout {
   uint32 time;
   void (*funcaddr)();  // <-------- function pointer

然后你的其余代码应该可以工作。

如果您没有看到行coptr->funcaddr = &test;的错误消息,那么我建议您调整编译器设置,让编译器可以告诉您的信息非常重要。