|
发表于 2009-8-4 10:28:28
|
显示全部楼层
处理这个问题可以考虑有二重指针。
以下是测试代码,在 VC++6.0运行通过
=============================================================
#include <stdio.h>
void (*_Key_Deal_A[4])(int);
// 函数的功能是单纯的打印输出
void key_deal_a0(int a)
{
printf("\n_Key_Deal_A : key_deal_a0");
printf("\nparam : %d",a);
}
void key_deal_a1(int a)
{
printf("\n_Key_Deal_B : key_deal_b0");
printf("\nparam : %d",a);
}
void key_deal_a2(int a) {}
void key_deal_a3(int a) {}
void (*_Key_Deal_B[3])(void);
void key_deal_b0(void)
{
printf("\n_Key_Deal_B : key_deal_b0");
}
void key_deal_b1(void) {}
void key_deal_b2(void) {}
void Init_Touch() //初始化函数指针数组,在系统初始化时调用
{
_Key_Deal_A[0]=key_deal_a0;
_Key_Deal_A[1]=key_deal_a1;
_Key_Deal_A[2]=key_deal_a2;
_Key_Deal_A[3]=key_deal_a3;
_Key_Deal_B[0]=key_deal_b0;
_Key_Deal_B[1]=key_deal_b1;
_Key_Deal_B[2]=key_deal_b2;
}
void print_i(void* arg)
{
printf("%s",(char*)arg);
}
int main(int argc,char **argv)
{
int i;
void *Key_Deal_Tab[10]={(void*)&_Key_Deal_A,(void*)&_Key_Deal_B};
void (**p)(int);
void (**q)(void);
Init_Touch();
p = Key_Deal_Tab[0];
q = Key_Deal_Tab[1];
// 遍历 deal a 中所有函数
for (i=0;i<4;i++)
(**(p+i))(20);
// 遍历 deal b 中所有函数
for (i=0;i<3;i++)
(**(q+i))();
return 0;
} |
|