C/C++系列 --- typedef与函数指针

typedef是一种有趣的声明方式,它为一种类型引入新的名字,而不是为变量分配空间。

一般情况下,typedef用来简洁地表示指向其他东西的指针。

以signal()原型的声明为例。

signal()是一种系统调用,用于通知运行时系统,当某种特定的软件中断发生时调用特定的程序。

当你调用signal(),需要通过参数传递告诉它中断的类型以及用于处理中断的程序。

signal()声明如下:

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

让我们用刚才掌握的技巧来分析这个声明,会发现它的意思如下:

void (*signal(    ) )(int);

signal是一个函数,它返回一个函数指针,后者所指向的函数接受一个int参数,并返回void。

其中一个恐怖的参数就是其本身:

void (*func)(int);

它表示一个函数指针,锁指向的函数接受一个int参数,返回值是void。

现在让我们体会一下,怎样用typedef来代替通用部分,从而进行简化。

typedef void (*ptr_to_func)(int);
// 它表示ptr_to_func是一个函数指针,该函数接受一个int参数,返回值为void

ptr_to_func signal(int,ptr_to_func);
// 它表示signal是一个函数,它接受连个参数,
// 其中一个是int,另一个是ptr_to_func,返回值是ptr_to_func

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值