2014-12-03 39 views
0

我已經完成了我在結構中的閱讀,但是到處都有不同的方式來創建它們並初始化它們。你能否告訴我你的意見,我已經做到了,並指出你會改變什麼,爲什麼!在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 
    }; 
} 

回答

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(); 
} 
+0

如果我的建議,然後傳遞到另一個函數的'&my_struct '那麼我將如何從那裏調用結構的func函數? – Rakim 2014-12-03 15:11:42

相關問題