1、函数指针
void (*FUNC)(void); // 声明
使用:
void (*FUNC)( ) = Function; // Function 为函数名称
FUNC( );
当然也可以使用如下方式:
typedef void (*FUNC)(void); // 定义类型
使用:
FUNC myfunc = &Function; // 有没有取地址符号 貌似都可以
myfunc( );
2、函数指针数据
和函数指针一个样
定义 / 声明
void (*InitAllFunc[MAX_FUNC_NUM])( );
typedef void (*InitAllFunc[MAX_FUNC_NUM])( );
使用:
void (*InitAllFunc[])() = {Init_1, Init_2, Init_3};
for (int i = 0; i < 3; ++i)
{
InitAllFunc[i]();
}
InitAllFunc myInit = {Init_1, Init_2, Init_3};
for (int i = 0; i < 3; ++i)
{
myInit[i]();
}
特别说明:
对于 函数名称 和对函数名称取地址 结果是一样的问题,其实不需要深究,在c语言的语法上做了规定而已;
这个问题有点类似于 指针和数组,用直接输出数组名和数据数组名的地址,也都是一样;
eg: void func(); func是一个函数名称,在内存中就是一个函数的首地址;
而&func 表示这个对象的指针(函数其实不是指针), 所以 定义函数指针的时候 用了 void (*FUNC)();
所以上述只要你愿意 就可以 写成奇葩 样子, 调用的时候 (*func)( )或者 (*********func)( );