在C中创建和初始化包含函数指针的结构的正确方法是什么?

时间:2014-12-03 14:51:50

标签: c struct initialization function-pointers

我已经完成了对结构的阅读,但在任何地方我都看到了创建它们并初始化它们的不同方法。你能否告诉我你对我做的方式的看法,并指出你会改变什么以及为什么!

标题中的

typedef void (*ActionFunc)(void);

typedef struct {
    ActionFunc func;
} MyStruct;

在C文件中:

static MyStruct* my_struct;

void action(){
    /*....*/
}

void my_function(){
    my_struct = &(MyStruct){
        .func = action
    };
}

1 个答案:

答案 0 :(得分:1)

我不明白你为什么把my_struct变成指针。

my_function()中的初始化无法正常工作,您将my_struct设置为复合文字的地址,而my_function不会停留在my_func退出。

只需使static MyStruct my_struct; void my_function(void) { my_struct.func = action; } 成为一个合适的全局结构(如果这是你需要的),而不是指针,并直接更改它。

my_struct

你可以从任何地方访问存储的函数指针(毕竟void random_function(void) { extern struct MyStruct my_struct; my_struct.func(); } global !),如下所示:

{{1}}