小理解

本文深入探讨了C语言中指针的多种应用,包括数组指针、函数指针、函数指针数组、指向函数指针数组的指针以及回调函数的使用。详细解释了每种指针类型的定义、特性和使用场景,帮助读者全面理解C语言指针的复杂性和灵活性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、数组指针

数组名本身就是一个指针,指向数组的首地址(如int (*p)[10]
表示一个指向10个int元素的数组的一个指针。)注意这是声明定长数组时,其数组名指向的数组首地址是常量。而声明数组并使某个指针指向其值指向某个数组的地址(不一定是首地址),指针取值可以改变。

二、函数指针

函数指针就是一个指向某一类型函数的指针int (*p)(int,int); //p为指向返回int型,带两个int型参数的函数的指针。函数指针是指向函数的指针变量。因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上一致的。函数指针有两个用途:调用函数和做函数的参数。

三、函数指针数组

函数指针数组是一个其元素是函数指针的数组。那么也就是说,此数据结构是是一个数组,且其元素是一个指向函数入口地址的指针。首先说明是一个数组:数组名[] 其次,要说明其元素的数据类型指针:*数组名[]. 再 次,要明确这每一个数组元素是指向函数入口地址的指针:函数返回值类型 ?*数组名[])().请注意,这里为什么要把“*数组名[]”用括号扩起来呢?因为圆括号和数组说明符的优先级是等同的,如果不用圆括号把指针数组说明 表达式扩起来,根据圆括号和方括号的结合方向,那么 *数组名 说明是元素返回值类型为指针的函数数组。不知道是不是有这样的函数数组,所以必须括起来,以保证数组的每一个元素是指针。

四、指向函数指针数组的指针和定义

用函数指针变量调用函数可以用指针变量指向整形变量、字符串、数组、结构体、也可以指向一个函数。一个函数在编译时被分配一个入口地址,这个入口地址就称为函数指针。可以用一个指针变量指向函数,然后通过该指针变量调用此函数。指向函数的指针变量的一般定义形式为: int (*p)(test)这里数据类型就是函数返回值的类型。

五、回调函数的使用

回调函数分三步:注册回调函数、消息事件触发回调函数、执行回调函数。通常以库的形式,供别人调用实现。回调函数就是本模块实现的回调函数,但是调用却不是自己来调,而是由别的模块来调的,可更好的把握调用函数的时机,回调函数依赖对应注册回调的模块,回调函数由该模块触发,触发的条件、时间点,都是由该模块控制,在不同模块间进行使用,可令触发逻辑与业务逻辑分离,让代码功能性上更为清晰易懂。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值