typedef int (init_fnc_t) (void)和typedef int (*init_fnc_t) (void)

转自: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

最终记住可以使用函数名或函数指针来调用函数就行了~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值