C语言声明的优先级规则

图为《C专家编程》的第三章,写的很好,有了这个规则再也不用担心指向常量的指针、常指针、指向常量的常指针傻傻分不清楚了偷笑




实例二:

void (*signal (int sig, void(* func) (int))) (int);

首先剥离参数,变为:

void (*signal (                                              )) (int)

根据上面规则,从signal开始读,

然后是B.2,signal后面有(), 可知signal是一个函数,剥离函数signal()后可知它的返回值是一个函数指针void (* )(int ) ,该函数指针的返回值为void,参数为int。

而(int sig, void(* func) (int)部分为signal函数的参数。确实有点复杂睡觉

如果还是不理解,可以参考函数指针和函数声明:

函数指针声明:void (*pfun) (int);

函数生命 void fun(); 返回值为void,若想返回函数指针,则用fun()替换pfun---> void (* fun()) (int);这样是不是好理解一些。


若使用typedef定义一下: typedef void (*pfun)(int)

那么复杂的void (*signal (int sig, void(* func) (int))) (int);就变为了pfun signal(int pfun);既好理解有方便书写大笑

嗯,以后写函数指针的时候可以考虑使用typedef


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值