[详解] C/C++函数指针: int * (*ptr) ();和int (**ptr) ();的差异及其形成原因


在这里插入图片描述


1. 知识点

在 C 或 C++ 语言的语法规则中,对于多重指针的声明,结合顺序是从右向左的。

2. 差异

int *(*ptr) (); // 指向 返回int指针的函数 的函数指针
int (**ptr) (); // 指向 返回int的函数 函数指针的指针

3. 成因

对于 int (*ptr)(); ,结合顺序是从右向左。首先,ptr 与最右侧的 * 结合,此时 *ptr 表示 ptr 是一个指针。然后整体表示这个指针指向的是一个返回 int 类型且无参数的函数。

对于 int *(*ptr)(); ,同样从右向左结合。ptr 先与最右侧的 * 结合,形成 *ptr 表示 ptr 是一个指针。然后整体看,int *(*ptr)(); 表示这个指针指向的是一个无参数且返回 int* 类型(即指向 int 的指针)的函数。


4. 总结(重要)

总结来说,差异在于第一个声明中 ptr 是指向返回 int 类型的函数的指针;第二个声明中 ptr 是指向返回指向 int 的指针的函数的指针。这种结合顺序的差异由 C 或 C++ 语言的语法规则所决定,从而清晰准确地定义了不同的数据类型和指针关系。

5. 小测试

int ** (**ptr) (parameter_list);是个什么玩意?

答案在这里: 传送门


[跪了] 求三连!!!

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值