我已经完成了对结构的阅读,但在任何地方我都看到了创建它们并初始化它们的不同方法。你能否告诉我你对我做的方式的看法,并指出你会改变什么以及为什么!
标题中的:
typedef void (*ActionFunc)(void);
typedef struct {
ActionFunc func;
} MyStruct;
在C文件中:
static MyStruct* my_struct;
void action(){
/*....*/
}
void my_function(){
my_struct = &(MyStruct){
.func = action
};
}
答案 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}}