直入正题,研究了好久真是恼人。。。
第一步。定义函数指针 typedef void(* pt )(device *de,message *msg);
这里用typdef定义 函数指针类型 pt,参数为某结构体
第二步。定义函数指针数组。static pt func[]={func1,func2,func3,func4}; 其中func1-4是pt参数类型的函数,可用pt类型的指针指向寻找需要跳转的函数func.
第三步。定义获取函数指针数组地址的指针函数,此指针函数返回的指针是pt类型的指针。
static pt *get_func_array(void){
return func;} 注意第二步第三步需要放在一个.c中。表示该指针函数指向 上述的函数指针数组。
第四步。 在主函数中定义 pt *p;
声明p为指向函数指针的指针;
p=get_func_array;
就把指向函数指针数组的指针地址传给指向函数指针的指针。
第五步。
然后主循环调用该指向函数指针的指针就调用函数指针数值的函数元素
while(1)
{
(p[state])(device ,message);
}
这样就简单实现了轮询状态机的功能啦!!!