指针(二十九)深入讲解(三)

说明:本小结更倾向于'理解'

一    前期回顾

二    数组参数

思考:在写代码的时候如果要把"数组"或者"指针"传给函数,那'函数的参数'该如何'设计'呢?

①    一维数组传参 

备注:指针数组的'首元素'是一级'指针';指针数组的'数组名'对应'该指针的地址',需要'二级'指针来接收

②    二维数组传参

 ③    小结

既可以写成'数组[大写可省略]',也可以写成'指针[合理的指针类型]'

三    指针参数

说明:针对'函数'的

①    一级指针传参

思考:当一个'函数的参数'部分为'一级指针'的时候,函数能'接收'什么参数?

void test1(int *p) {
    //test1函数能接收什么参数?
}

  

②    二级指针传参

思考:当函数的参数为'二级指针'的时候,可以接收'什么参数'?

四    函数指针

①    基本概念

函数指针是'指向'函数的指针,'存放'的是'函数的地址',函数的'地址'是什么?

 ②   如何保存函数的地址

++++++++++'解读'++++++++++

1)pfun1先和*结合,说明pfun1是'指针' -->()结合-->'优先级'问题

2)然后与('参数类型')结合指针指向的是一个'函数'

3)指向的函数类型-->'返回值类型'为void

备注:使用'函数地址'调用函数

③    小结

指针-->指向的是'什么'? -->思考:用'什么'来接收

④    习题分析

++++++++++++++"理解这两段代码的含义"++++++++++++++

核心:理解'函数指针'类型;去掉'指针名'就是了

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

//代码2
void (*signal(int , void(*)(int)))(int);

1)代码1 

+++++++++++++++"变量的类型"+++++++++++++++

1) int a;  // 普通-->整数类型-->类型在'前'、变量名在'后'

2) void (*pfun1)(int) // '正确'

  函数指针的'类型':void (*)(int)

'error': void (*)(int)  pfun1 -->不能参照'int a'来理解

(*(void (*)())0)();

1)(类型)0 -->'强制'类型转换;这里把'0'当作'函数的地址'

2)类型:void (*)() -->无参的'指针类型'  -->调用时候'只需要类型'即可,不需要'变量名'

3)(*函数指针变量)(); -->'调用函数'

"* 解引用"  -->指向'指针'指向的对象

小结:函数的'调用'

2)代码2 

信号之signal函数

思考:代码2'太复杂',如何'简化'?  --> typedef'重新'定义类型

⑤    *函数指针的问题

五    函数指针数组

①   声明使用

1)  数组是'存放相同(same)类型'数据的存储空间

2)  函数指针数组:把'函数的地址'存到一个'数组中',数组的'元素'都是函数指针

②    练习

③    案例讲解

函数指针数组'场景' --> "转移表"

1)代码 

2)结果 

 

3)解决冗余问题

六    指向函数指针数组指针

细节: 指针'指向数组'的时候,最好指定'[number]'

指向"函数指针数组"的指针是一个 指针,'指针指向一个数组',数组的'元素'都是 '函数指针'

七    回调函数

①    概念

②    案例

③④⑤⑥

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值