[英]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.