调用函数,由结构数组中的函数指针成员指向

时间:2014-08-05 10:17:22

标签: c arrays structure function-pointers

我想调用一个函数,由结构数组中的函数指针成员指向。

在运行时,我想为函数指针订购不同的函数。

不知何故,不会调用这些函数。你能解释一下,为什么?

我的代码是:

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()中谢谢大家!

1 个答案:

答案 0 :(得分:0)

您只能在“运行时”内单独初始化数组(我假设您的运行时间为main()或main()调用的函数。)或者,您可以在声明处初始化它们:

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