指针习题讲解

发布时间:2026/8/12 18:50:47
指针习题讲解 1. 回调函数回调函数就是⼀个通过函数指针调⽤的函数。如果你把函数的指针地址作为参数传递给另⼀个函数当这个指针被⽤来调⽤其所指向的函数 时被调用的函数就是回调函数。我们来正常生成一个计算机程序来观察一下你会发现这其中有很多相似的步骤就比如每个case中的的语句只是调用的函数不同而已我们刚学了函数指针数组这时你们就可能会想到利用函数指针数组来访问函数回调函数就是函数指针的一种非常重要的应用这里就会问了不是函数指针数组吗为什么说是函数指针呢函数指针数组是多个函数指针放在同一个数组中本质也是函数指针而且回调函数也能使用函数指针来实现。函数指针数组上次那个函数指针数组的使用格式也叫做转移表通过函数指针数组来回调函数简化了调用函数的过程。函数指针用函数指针调用则只需要在case中调用指针函数将函数传地址的方式通过函数指针来调用函数。2. qsort使用qsort是个库函数可以直接使用用于对数据进行排序的是基于快速排序的思想进行排序的我们之前学过一个冒泡排序冒泡排序是一种排序方法快速排序也是一种方法一般不要求我们写冒泡排序我们一般都是使用qsort而且qsort是什么数据类型都能接收的。并不是qsort按照自己的方式来进行比较而是你需要传入比较函数指针来进行比较。对于函数指针也不是没有要求的我们可以通过这个速记口诀来记忆。我们生成一个比较函数来试试怎么用这里注意一下头文件stdlib.h千万不要忘记了qsort中的各个条件一定要记住学好一文编程语言最重要的就是语法这个求元素个数的放到外面就更好看出来了。3. 指针运算笔试题3.1 习题1这里的重点就是a1我们之前说过数组名整个数组的地址1就是加了一整个数组的大小因为整个数组的地址和首元素的地址是一样的所以我们加一整个数组的地址就直接跳到数组a的下一块内存地址强制类型转换后ptr-1实际上是减了一个int的空间也就是a[4]所指向的地址解引用之后就是5a1这个难度不高我们之前就着重强调过数组名就是首元素的地址现在1就是加一个元素的空间就是a[1]的地址解引用就是2。3.2 习题2这里是考察逗号表达式因为这里是小括号所以其实a中的元素就只有3个分别为135pa[0]代表二维数组第 0 行首元素地址等价于a[0][0]赋值给int *p也就是1。3.3 习题3这里主要考察二维数组的数组名二位数组的数组名指的是第一行元素的地址ptr1就是正常的整个数组的地址上一题一样的思路我们重点讲一下ptr2aa指的是第一行元素的地址1则跳过一行元素的空间*(aa1)aa[1][0]指的就是第二行元素的首元素(ptr2-1)指向的就是5对应的空间。3.4 习题4这主要考察的是二级指针二级指针pa指向*a对应的空间这样你可能有点难看出来其实你将字符指针数组的语法套进去你会发现还是很好看懂的paa[0]这里我们需要注意一定pa指向的是a[0]中首元素的地址只是因为是使用%s打印%s拿到字符起始地址后就会一直往后打印知道遇到\0并不是只打印一个字符。4. 总结我们通过习题可以深程度的了解指针的使用方式也方便我们巩固一些知识点你们在其他时间也需要通过刷题来查漏补缺相信你们可以将指针学透