C中函数指针用法的错误

时间:2012-04-07 15:56:45

标签: function pointers

#include <stdio.h>
#include <string.h>

void func1 (void) { printf( "1\n" ); }
void func0 (void) { printf( "0\n" ); }

typedef struct {
  void (*func0)(void);
  void (*func1)(void);
}mainJT;

static const mainJT coreJT = {
  core_func0,
  core_func1
};

mainJT currJT;

int main()
{
    currJT=coreJT;
    coreJT.core_func0();
    getchar();
    return 0;
}

请帮我修复错误,我相信我会犯一些明显的错误。感谢。

2 个答案:

答案 0 :(得分:0)

我看到很多错误: 例如:初始化结构的正确方法是: / *将类型点定义为具有整数成员x,y * /

的结构
typedef struct {
   int    x;
   int    y;
} point;

/* Define a variable p of type point, and initialize all its members inline! */
point p = {1,2};

所以你的部分代码是:

mainJT coreJT = {
  core_func0;
  core_func1;
};

完全错误。

还在哪里声明和定义了core_func1 core_func0函数.i看不到它们。

我猜您首先需要通过structures in c

答案 1 :(得分:0)

你的问题不太清楚,但我看到了我能找到的东西。

typedef struct {
  void (*func0)(void);
  void (*func1)(void);
} mainJT;

在这里,您声明了一个带有函数指针成员func0func1的结构体。然后,您尝试通过初始化列表定义coreJT变量:

static const mainJT coreJT = {
  core_func0,
  core_func1
};

但这不起作用,因为没有名为core_func0core_func1的函数! 你也试着打电话

  

coreJT.core_func0();

这也是错误的,因为你的结构没有名为core_func0的成员。


对于可能的解决方案,请尝试重命名您的函数:

void core_func1 (void) { printf( "1\n" ); }
void core_func0 (void) { printf( "0\n" ); }

并通过

调用您的函数指针
  

coreJT.func0();