阁边风月潭——关于C语言函数指针代码两段有趣的代码

在学习了函数指针变量的基础上,我们来研究两段比较有意思的代码

代码一:

(*(void (*)())0)();
  • 由内向外分解
  1. void (*)()这是一个函数指针类型
    void表示这个函数没有返回值
    (*)()表示这是一个指向函数的指针,该函数没有参数
  2. (void (*)())0这是一个强制转换类型
    也就是把0当作函数地址了
  3. (*(void (*)())0)函数的解引用
    – 前面加*,相当于调用0这个地址的函数
  4. (*(void (*)())0)()
    – 后面加一个()相当于调用这个函数



代码二:

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

由内向外分解

  1. void(*)(int)这是一个函数指针类型
    – 指向一个函数的指针
    – 该函数接受一个int参数
    – 返回void(即不返回值)
  2. signal(int, void(*)(int))这是一个函数,接收两个参数
    – 一个int类型的参数
    – 一个函数指针参数
  3. void (* ... )(int)函数返回一个函数指针
    – 指向一个函数的指针
    – 该函数接受一个int参数
    – 返回void

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值