深度理解指针【下】

本文深入探讨了C++中的函数指针,包括如何保存函数地址、理解函数指针类型、函数指针数组及其用途。还介绍了指向函数指针数组的指针的概念,并通过qsort函数解释了回调函数的工作原理。
摘要由CSDN通过智能技术生成

前言

在上一篇中,我们对对指针有了一个简单的刨析,在和一篇中,我们将加深难度,来探讨函数指针,回调函数等问题

1. 函数指针

#include <stdio.h>
void test()
{
 printf("hehe\n");
}
int main()
{
 printf("%p\n", test);
 printf("%p\n", &test);
 return 0; 
}

我们可以看看,其输出结果如下,这两个输出结果就是函数test的地址

那么问题来了我们如何保存这个函数的地址呢?这里就要用到了函数指针。

首先要存储一个地址我们肯定需要的是一个指针,则p先与*结合(*p),第二步,(*p)指向的是一个函数,且指向的函数无参数

那么我们就可以写出一个可以保存test函数的指针

void (*pfun1)()

提升理解

为了提高对于函数指针的理解,我们将刨析一下两个很有意思的代码

// 代码 1
( * ( void ( * )()) 0 )();

拆解后可知:
1. void(*)() 表示函数指针类型,是一个函数指针
2. ( void()() )0 表示对0进行强制类型转换,把0强制类型转换成一个函数的地址;如(int)1.8882
3. * ( void()() )0 表示对0地址处的函数进行了解引用操作
4.(* ( void(*)() )0)() 则表示调用0地址处的函数

————————————————————————————————

//代码二

void ( * signal ( int
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

善始善终!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值