指针习题讲解

1. 回调函数

回调函数就是⼀个通过函数指针调⽤的函数。如果你把函数的指针(地址)作为参数传递给另⼀个函数,当这个指针被⽤来调⽤其所指向的函数 时,被调用的函数就是回调函数。

我们来正常生成一个计算机程序来观察一下

你会发现这其中有很多相似的步骤就比如每个case中的的语句,只是调用的函数不同而已,我们刚学了函数指针数组,这时你们就可能会想到利用函数指针数组来访问函数,回调函数就是函数指针的一种非常重要的应用, 这里就会问了,不是函数指针数组吗?为什么说是函数指针呢?函数指针数组是多个函数指针放在同一个数组中,本质也是函数指针,而且回调函数也能使用函数指针来实现。

函数指针数组:

上次那个函数指针数组的使用格式也叫做转移表,通过函数指针数组来回调函数,简化了调用函数的过程。

函数指针:

用函数指针调用,则只需要在case中调用指针函数,将函数传地址的方式通过函数指针来调用函数。

2. qsort使用

qsort是个库函数可以直接使用,用于对数据进行排序的,是基于快速排序的思想进行排序的,我们之前学过一个冒泡排序,冒泡排序是一种排序方法,快速排序也是一种方法,一般不要求我们写冒泡排序我们一般都是使用qsort,而且qsort是什么数据类型都能接收的。

并不是qsort按照自己的方式来进行比较,而是你需要传入比较函数指针来进行比较。对于函数指针也不是没有要求的:

我们可以通过这个速记口诀来记忆。

我们生成一个比较函数来试试怎么用:

这里注意一下,头文件stdlib.h千万不要忘记了,qsort中的各个条件一定要记住,学好一文编程语言最重要的就是语法,这个求元素个数的放到外面就更好看出来了。

3. 指针运算笔试题

3.1 习题1

这里的重点就是(&a+1)我们之前说过&数组名==整个数组的地址,+1就是加了一整个数组的大小,因为整个数组的地址和首元素的地址是一样的,所以我们加一整个数组的地址就直接跳到数组a的下一块内存地址,强制类型转换后,(ptr-1)实际上是减了一个int的空间,也就是a4所指向的地址,解引用之后就是5;(a+1)这个难度不高,我们之前就着重强调过数组名就是首元素的地址 ,现在+1就是加一个元素的空间,就是a1的地址,解引用就是2。

3.2 习题2

这里是考察逗号表达式,因为这里是小括号所以其实a中的元素就只有3个,分别为1,3,5;p=a0代表二维数组第 0 行首元素地址,等价于&a00,赋值给int *p,也就是1。

3.3 习题3

这里主要考察二维数组的数组名,二位数组的数组名指的是第一行元素的地址,ptr1就是正常的整个数组的地址,上一题一样的思路,我们重点讲一下ptr2;aa指的是第一行元素的地址,+1则跳过一行元素的空间,*(aa+1)=aa10,指的就是第二行元素的首元素,(ptr2-1)指向的就是5对应的空间。

3.4 习题4

这主要考察的是二级指针,二级指针pa指向*a对应的空间,这样你可能有点难看出来,其实你将字符指针数组的语法套进去你会发现还是很好看懂的,pa=a0,这里我们需要注意一定,pa指向的是a0中首元素的地址,只是因为是使用%s打印,%s拿到字符起始地址后就会一直往后打印,知道遇到\0,并不是只打印一个字符。

4. 总结

我们通过习题可以深程度的了解指针的使用方式,也方便我们巩固一些知识点,你们在其他时间也需要通过刷题来查漏补缺,相信你们可以将指针学透!

相关推荐
Navigator_Z34 分钟前
LeetCode //C - 1254. Number of Closed Islands
c语言·算法·leetcode
Logic1011 小时前
C语言/数据结构滑动窗口题解:替换k个字符后的最长连续相同字符子串(LeetCode 424)
c语言·数据结构·字符串·滑动窗口·时间复杂度·频率统计·算法题
free-elcmacom2 小时前
发际线警告!手撕《C陷阱与缺陷》终极 BOSS:signal 函数与 typedef 魔法
c语言·开发语言·visual studio code·visual studio
haluhalu.3 小时前
初识 Protobuf:微服务跨语言通信的一份契约
java·c语言·开发语言·c++·python
临期冰淇淋3 小时前
Unisoc 展锐平台Camera摄像头分辨率适配
linux·c语言·驱动开发
山下梅子酒2254 小时前
洛谷-入门-B2054
c语言
老当益壮梁奶奶5 小时前
ARM汇编学习笔记(四):i.MX6ULL裸机开发:从汇编点灯到C语言BSP工程管理
c语言·arm开发·单片机·嵌入式硬件·51单片机
傲世仙尊5 小时前
预处理详解-define宏井号条件编译一篇过
linux·c语言
老王爱玩车5 小时前
第6讲:数组和函数实践-----控制台扫雷
c语言·开发语言·学习
是隼人5 小时前
buuctf-pwn [NewStarCTF 2023 公开赛道]orw&rop(shellcode+orw)题解(学习过程持续更新)
c语言·学习·安全·pwn入门·ctf入门