转自:http://blog.163.com/wodegoodfriends@yeah/blog/static/167983845201121893553397/
1、typedef int (init_fnc_t) (void);表示定义init_fnc_t为函数类型,该函数返回int型,无参数。
而“init_fnc_t *init_sequence[]={ cpu_init, board_init }”表示用init_fnc_t(函数类型)去定义一个一维指针数组,数组中的元素都是指针变量,而且都是指向函数的指针,这些函数返回值都是int型,无参数的。更明朗的说就是数组中的每个元素是用来存放函数入口首地址的。
2、int (*init_fnc_t) (void);表示定义一个函数指针(返回值为int型,无参数的函数指针,存放的是函数的首地址),typedef int (*init_fnc_t) (void);表示定义一个函数指针类型,即可以直接用init_fnc_t这个符号去定义函数指针,“init_fnc_t init_sequence[]={cpu_init, board_init }”表示用init_fnc_t(函数指针类型)去定义一个数组,数组里面的元素都是一个函数指针,cpu_init, board_init 都是函数指针,存放的都是函数的首地址。
int sum(int a, int b)
{
return a+b;
}
int main()
{
typedef int sum_t(int ,int ); //函数类型
typedef int (*psum_t)(int , int ); //函数指针类型
psum_t sum1 = sum;
printf("ret :%d\n", (*sum1)(1,2));
printf("ret :%d\n", sum1(1,2));
sum_t *sum2 = sum;
printf("ret :%d\n", sum2(2,3));
printf("ret :%d\n", (*sum2)(2,3));
printf("ret :%d\n", (*sum)(2,3));
return 0;
}
以上代码好绕吧。这里有分析文章:
C语言函数名与函数指针详解:http://c.biancheng.net/cpp/html/496.html
最终记住可以使用函数名或函数指针来调用函数就行了~