我想调用一个函数,由结构数组中的函数指针成员指向。
在运行时,我想为函数指针订购不同的函数。
不知何故,不会调用这些函数。你能解释一下,为什么?
我的代码是:
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 Askmish: 也许,我粘贴的代码不清楚。当然,我初始化了函数指针, 但正如我上面所写,我犯了一个错误。
致BabacarDiassé: 是的,“在运行时间”的意思是,下一个代码在main()中谢谢大家!
答案 0 :(得分:0)
您只能在“运行时”内单独初始化数组(我假设您的运行时间为main()
或main()调用的函数。)或者,您可以在声明处初始化它们:
BtnStruct *BtnStructArray[2] = {&Btn0, &Btn1}