一个小小的“指向返回指向指向int类型的指针的指针的函数的函数指针的指针“给我带来的创伤, 要我用一辈子来治愈.

文章目录

    • 1. 本期议题
    • 2. 这玩意是啥?
    • 3. 形成过程
      • 不妨我们先依次对星号进行编号, 以便理解星号的结合顺序
      • Finally, 求三连!!!


1. 本期议题

int ** (**ptr) (parameter_list); // 是个啥玩意?

还没搞清楚函数指针这种语法的小伙伴们可以去看看我往期的相关文章.

往期相关文章 传送门


2. 这玩意是啥?

int ** (**ptr) (parameter_list);
这大宝贝叫"指向返回指向指向int类型的指针的指针的函数的函数指针的指针", 这名字容易给人整微醺了.Damn是小伙伴们别担心.接下来我一一给大家解释.


3. 形成过程

不妨我们先依次对星号进行编号, 以便理解星号的结合顺序

PS: "希佳佳"的多重指针声明中, 星号的结合顺序是按从右到左的顺序来的.
我们这里的编号顺序①②③④也是按照结合顺序排列的.

星号编号图片

  • ①先与ptr结合, 形成指针*ptr.
  • ②和*ptr 形成指向指针的指针**ptr(即, 二级指针)
  • ③和④同理, 与int形成二级指针int **
  • 按语法, return_type (*func_name) (parameter_list);会形成应该名为func_name的函数指针.这里类比一下, 这里**是一个指向指针的指针(记作"二级指针 I"), 而int **代表返回类型是一个指向int类型的指针的指针(记作"二级指针 II")
  • 按上面所说的方式来理解,二级指针 I 最终指向了一个函数, 所以ptr是一个指向函数指针的指针.而这个指向函数指针的指针所指向的函数的返回的数据类型又是二级指针 II, 所以它就是指向返回指向指向int类型的指针的指针的函数的函数指针的指针.

Finally, 求三连!!!

不知道大家看完, 有没有跟我一样微醺. "少年的脸红,胜过一切情话."
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值