天天看点

函数指针和函数数组指针

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)( );