簡體   English   中英

調用由結構數組中的函數指針成員指向的函數

[英]call a function, pointed by a function pointer member in a structure array

我想調用一個由結構數組中的函數指針成員指向的函數。

在運行時,我想對函數指針排序不同的函數。

不知何故,函數不會被調用。 您能解釋一下為什么嗎?

我的代碼是:

typedef struct 
{
    char c; // several simple type variables...
    int(*eventhandler)(int param);  // function pointer member (maybe, it would do with double indirection...?)
} BtnStruct;

BtnStruct Btn0; // BtnStruct variable 
BtnStruct Btn1;

BtnStruct *BtnStructArray[2]; // array of pointers, pointed to BtnStruct type variables

BtnStructArray[0] = &Btn0; // fill the array with addresses of BtnStruct variables
BtnStructArray[1] = &Btn1;

int returnvalue; // just for test

int function0(int param) // say, there is a similar function1()
{
    int retval;

    // do something

    return(retval);
}

// In Run time:

BtnStructArray[0]->eventhandler = function0; // I try to give the address of the function, to the function pointer member
BtnStructArray[1]->eventhandler = function1;    


returnvalue = BtnStructArray[0]->eventhandler(10); // here I want to call the pointed function with parameter 
                                                   // But the function is not invoked

解決了! :)

我忘記了“ function0”之前的“&”。 這是錯誤。

因此正確:

BtnStructArray[0]->eventhandler = &function0;

To Barak:感謝您的提示,但是由於某些原因,我必須使用指針數組,而不是簡單的結構數組。 但是您幫助了我,因為在測試您的簡單版本時,我發現了錯誤。 :)

To Askmish:也許,我粘貼的代碼不清楚。 當然,我初始化了函數指針,但是正如我上面所寫的,我犯了一個錯誤。

對BabacarDiassé:是的,“在運行時”是指下一個代碼在main()中謝謝大家!

您可以僅在“運行時”內部單獨初始化數組(我想您的運行時是main()main()調用的函數。)或者,您可以在聲明中進行初始化:

BtnStruct *BtnStructArray[2] = {&Btn0, &Btn1}

暫無
暫無

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

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