簡體   English   中英

在C中創建和初始化包含函數指針的結構的正確方法是什么?

[英]What is the right way of creating and initializing a struct containing a function pointer in C?

我已經讀完結構,但是到處都可以看到創建和初始化它們的不同方法。 能否請您告訴我您對我的工作方式的看法,並指出您將進行哪些更改以及原因?

在標題中:

typedef void (*ActionFunc)(void);

typedef struct {
    ActionFunc func;
} MyStruct;

在C文件中:

static MyStruct* my_struct;

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

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

我不明白為什么您my_struct成為指針。

my_function()的初始化將不起作用,您將my_struct設置為復合文字的地址,當my_function退出時,該文字不會停留在周圍。

只需將my_func為適當的全局結構(如果需要的話)(而不是指針),然后直接更改它即可。

static MyStruct my_struct;

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

您可以從任何地方訪問存儲的函數指針( my_struct畢竟是global !),如下所示:

void random_function(void)
{
  extern struct MyStruct my_struct;

  my_struct.func();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM