当前位置: 首页 > news >正文

Day_13 > 指针进阶(2)

目录

1.函数指针数组

2.指向函数指针数组的指针

3.回调函数

qsort()函数

代码示例

void*

4.结束


今天我们在进阶指针的基础上,学习进阶指针的第二部分

1.函数指针数组

首先我们回顾一下指针数组

char* arr[5]://字符指针数组 - 数组 - 存放的是字符指针

int* arr[6]://整型指针数组 - 数组 - 存放的是整型指针

那么函数指针数组同理

函数指针数组 - 数组 - 存放的是函数指针 - 存放的是函数的地址

我们举个例子

这里int (*pfArr[4])(int,int)意思是

pfArr[4]是一个函数指针数组,这个数组有4个元素,每个元素都是一个函数指针

每个函数指针指向的是参数为(int,int)返回值为int的函数,即int(*pf)(int,int) 

对比一下:

int(*p)(int,int)          //函数指针

int(*p[4])(int,int)      //函数指针数组

2.指向函数指针数组的指针

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

我们推一下

对比一下,函数指针数组和指向函数指针数组的指针

int (*pfArr[4])(int, int) //函数指针数组

int (*(*p)[4])(int, int)    //指向函数指针数组的指针

3.回调函数

回调函数就是一个通过函数指针调用的函数

如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数

回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外 的一方调用的,用于对该事件或条件进行响应

qsort()函数

我们演示一下qsort函数的使用

qsort是一个库函数,底层使用的快速排序的方式,对数据进行排序的

这个函数可以直接用来使用,这个函数可以用来排序任何类型的数据 

首先,我们先了解一下qsort函数的用法

qsort - C++ Reference (cplusplus.com)

这个函数一共有四个参数,我们能看到,第四个参数是一个函数指针

对四个参数的解释是

直译过来的意思是

排序的时候:

  • 排序整型数组,两个整型数组可以直接使用 > 比较
  • 排序结构体数组,两个结构体的数据可能不能直接用 > 比较

也就是不同类型的数据,比较大小的方法是有差异的

代码示例

qsort使用的时候需要包含<stdlib.h>头文件

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
void print(int arr[], int sz)
{for (int i = 0; i < sz; i++) {printf("%d ", arr[i]);}printf("\n");
}
int cmp_int(const void* e1, const void* e2)
{return *(int*)e1 - *(int*)e2;
}
void test1()
{int arr[] = { 9,8,7,6,5,4,3,2,1,0 };int sz = sizeof(arr) / sizeof(arr[0]);print(arr, sz);qsort(arr, sz, sizeof(arr[0]), cmp_int);print(arr, sz);
}
int main()
{//数据test1();return 0;
}

代码效果就是这样

void*

这里我们解释一下void*的用法

  • void*类型的指针 - 不能进行解引用的操作,也不能进行+-整数的操作
  • void*类型的指针是用来存放任意类型数据的地址

4.结束

那么今天的学习就到这里咯,今天我们学习了指针进阶

函数指针数组,指向函数指针数组的指针的知识

小杜跟各位小伙伴在一起成长,祝我们都能成为大牛!

                                                                                                                                //小杜的成长之路

http://www.lryc.cn/news/161272.html

相关文章:

  • 对Transformer中的Attention(注意力机制)的一点点探索
  • 车内信息安全技术-安全技术栈-软件安全
  • Redis常见命令
  • Android Studio实现一笔画完小游戏
  • 【Python 程序设计】数据人员入门【02/8】
  • 学习笔记——树上哈希
  • Opencv快速入门教程,Python计算机视觉基础
  • laravel 报错误信息 Carbon\Exceptions\InvalidFormatException
  • UI自动化之混合框架
  • SQL创建用户-非DM8.2环境(达梦数据库)
  • Thread类中run和start的区别
  • ElementUI浅尝辄止35:Checkbox 多选框
  • 讲讲如何用IDEA开发java项目——本文来自AI创作助手
  • Kafka3.0.0版本——消费者(Range分区分配策略以及再平衡)
  • WeiTools
  • 目标检测数据集:医学图像检测数据集(自己标注)
  • 【系统设计系列】数据库
  • mp4压缩视频不改变画质?跟我这样压缩视频大小
  • AQS同步队列和等待队列的同步机制
  • vue3实现无限循环滚动的方法;el-table内容无限循环滚动的实现
  • Windows 安装 MariaDB 数据库
  • RK3568-mpp(Media Process Platform)媒体处理软件平台
  • 【ModelSim】使用终端命令行来编译、运行Verilog程序,创建脚本教程
  • 腾讯云网站备案详细流程_审核时间说明
  • HTTP介绍:一文了解什么是HTTP
  • 动态规划之子数组系列
  • LeetCode(力扣)332.重新安排行程Python
  • Pytho 从列表中创建字典 (dict.fromkeys()的问题)
  • 第14节-PhotoShop基础课程-图框工具
  • 使用 Nacos 在 Spring Boot 项目中实现服务注册与配置管理