【问题标题】:What is the right way of creating and initializing a struct containing a function pointer in C?在 C 中创建和初始化包含函数指针的结构的正确方法是什么?
【发布时间】:2014-12-03 14:51:50
【问题描述】:

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

在标题中:

typedef void (*ActionFunc)(void);

typedef struct {
    ActionFunc func;
} MyStruct;

在C文件中:

static MyStruct* my_struct;

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

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

【问题讨论】:

    标签: c struct initialization function-pointers


    【解决方案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();
    }
    

    【讨论】:

    • 如果我按照建议进行操作,然后将&my_struct我如何从那里调用结构的func函数?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多