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

C语言指针进阶阶段学习总结(函数指针、回调、qsort全梳理)

前言

耗时数日完整攻克C语言指针后半段最难板块:二级指针、数组指针、字符指针、函数指针、函数指针数组、回调函数、qsort库排序函数,结合四则计算器实战项目落地知识点,把抽象的指针语法全部转化为可运行代码,做一份完整学习复盘记录。

一、核心知识点逐条复盘

1. 基础指针&字符串关键区分

1. strlen :统计字符串有效字符长度,不计末尾 \0 结束标志

2. sizeof :计算变量/数组占用总内存字节,包含字符串末尾 \0

3. 数组作为函数参数传递时:数组会被隐式转为首元素指针,无法在函数内部计算数组总长度,这是初学高频易错点。

2. 各类指针变量细致区分(重中之重)

1. 字符指针变量 char* ps

存放字符串常量首元素地址,字符串常量存放在只读内存区,不可修改内容;

c

char* ps = "abcdef";

2. 字符数组 char arr[] = "abc";

字符串拷贝到数组栈空间内,内容支持修改。

3. 数组指针变量

专门用来存放整个数组的地址,语法: int (*p)[10] = &arr;

括号绝对不能省略,省略就会变成指针数组,二者完全不同。

4. 指针数组

数组里每一个元素都是指针,常见: char* arr[] (字符串数组)、 int* arr[] (整型指针数组)。

5. 二级指针 int** pp

存放一级指针变量的地址,多用于操作指针数组。

3. 函数指针体系(本次学习核心)

1. 函数指针变量

函数名和 &函数名 等价,都代表函数入口地址;

语法格式: 返回值类型 (*指针名)(参数类型);

示例:

c

// 接收两个int、返回int的函数指针

int (*pf)(int, int) = Add;

2. 函数指针数组

将多个同类型函数的地址存入数组,语法:

c

int (*pfarr[4])(int, int) = {Add, Sub, Mul, Div};

最大用处:替代冗余switch分支语句,依靠下标直接调用对应函数,代码极简、方便扩展,本次四则计算器项目核心骨架。

3. typedef 简化复杂指针类型

用来给繁琐的指针类型重命名,对比 #define 宏单纯文本替换:

- typedef :编译阶段类型重定义,类型安全

- #define :预处理直接文本替换,容易出现边界bug

面对多层嵌套函数指针,typedef可以大幅降低书写难度。

4. 回调函数 & qsort快速排序库函数

1. 回调函数定义:将函数指针作为参数传入另一个函数,外部传入不同逻辑函数,同一个函数内部就可以实现不同功能。

2. qsort 标准库排序函数

C语言stdlib.h自带通用快速排序函数,底层依托回调机制:

自定义比较规则回调函数,就可以对任意类型数据(整型、字符、结构体)完成升序/降序排序,是回调函数最经典的实战场景。

二、实战项目:双版本四则运算计算器

依托函数指针知识点,先后编写两个版本计算器,循序渐进优化代码:

版本1:基础版

- 编写加、减、乘、除4个运算独立函数

- 封装计算函数,接收函数指针参数完成运算

- main函数依靠switch判断用户输入选项,匹配后调用对应运算

- 支持循环菜单、退出程序、非法输入提醒

版本2:函数指针数组优化版(最终定稿)

1. 把四则运算函数地址存入函数指针数组,彻底删除冗长switch语句

2. 用户输入数字1~4,直接用数组下标调取运算函数,代码整洁度大幅提升

3. 完善容错逻辑:输入0退出程序、数字超出范围报错提示

4. 完整手写调试全部流程,吃透指针传递、函数调用底层逻辑

三、学习易错点总结

1. 各类指针书写括号位置极易写错:数组指针、函数指针括号缺一不可;

2. 混淆指针数组与数组指针,是指针阶段最容易踩的坑;

3. 函数指针调用传参顺序颠倒;

4. 除法运算未对除数为0做防护(后续迭代优化补充);

5. qsort回调比较函数返回值逻辑容易记反,影响升降序结果。

四、后续学习计划

1. 完整吃透qsort函数,手写int数组、字符数组两套排序案例;

2. 完善计算器项目:增加除数0判定、连续计算、历史结果查看功能;

3. 整体复盘全部指针知识点,梳理思维导图巩固记忆;

4. 开始预备C语言结构体、文件操作内容,为后续51单片机、STM32嵌入式开发铺垫基础。

收尾感悟

指针是C语言的灵魂,前期晦涩难懂,结合计算器实战一点点拆解之后,终于打通了函数指针、回调思想。这部分内容是嵌入式开发底层必备基础,学好之后后续单片机驱动、硬件代码编写会轻松很多。https://gitcode.com/gcw_RyL6LF93/study-c-languague.git仓库地址

http://www.jsqmd.com/news/1290819/

相关文章:

  • 简历上的AI证书真的有用吗?CAIE认证持证者的真实加分真相
  • 【Kimi K3极限部署技术解析】Deltafin如何在M1 Max上运行2.8T参数模型
  • Base URL、API Key、模型名分别是什么?为什么配错一项就可能调用失败
  • 2026 年玉树评价高的盘式曝气器制造商哪家专业,你花大价钱买的这套废水处理核心装置,竟藏着旁人没说透的省钱门道。 - 行业推荐官【认证】
  • HarmonyOS应用开发实战:猫猫大作战-TypedArray 类型化数组
  • 青岛出发西藏靠谱旅行社推荐榜:2026年度纯玩小团口碑冠军揭晓,附边防证办理避坑指南| 附:旅行社电话 - 西藏康泰旅行社
  • ROS中遨博协作机器人复杂轨迹规划实战:从MoveIt!配置到三维螺旋线生成
  • Pixelle-Video:告别剪辑烦恼,AI三分钟打造专业短视频
  • NAT网络地址转换:原理、配置与常见问题排查指南
  • 2026年适合健身器材产品的美国海外仓推荐:重货操作、破损控制与尾程折扣深度解析 - 科技焦点
  • 2026 年更新:户县可靠的三排链轮供应厂家找哪家,花小钱让设备连转三年,原来选对这玩意儿才是关键? - 鉴选官
  • PCIe物理层之LTSSM
  • Python进阶实操:深入剖析装饰器底层原理与高阶应用场景
  • 签到产品及体验设计|兰亭妙微用户体验设计公司设计实战复盘
  • 【泄底】钟表馆诡计(绫辻行人)
  • Shiro Session管理实战:从核心原理到集群部署与强制下线实现
  • 2026年电梯节能设备选哪家?排行榜推荐 - 品牌排行榜
  • 每日 AI 研究简报 · 2026-07-28
  • 终极指南:3步使用B(l)utter高效逆向Flutter移动应用
  • 金华优秀的抗贝特板材制造商怎么选才靠谱? - 品牌优推
  • 【单片机课程设计/毕业设计】基于单片机的室内空气质量监测与通风控制系统设计 基于 STM32 的环境阈值可调智能排风报警系统设计(010801)
  • React + TypeScript 编辑表单:为什么要区分 name 和 editingName
  • [第一次Python训练题]
  • 杭州本地 GEO 服务商怎么选?2026 年 7 月一级资质机构横向测评 - 品牌测评网
  • 2 cache 2axi-2架构:多核处理器缓存一致性优化方案解析
  • 2026年上海代理报关公司联系电话汇总,进口报关清关不用愁 - 品牌排行榜
  • 在线图片裁剪:屏保壁纸先过自检清单再动手 - 办公小帮手
  • 2026年苏州AI优化公司大盘点:探寻GEO领域的佼佼者 - 品牌排行榜
  • C语言快速排序算法详解:从核心原理到工程优化实践
  • 计算机单片机毕设实战-基于 DS18B20 的室内恒温加热硬件系统开发 基于 STM32 的 OLED 显示温度调节系统设计(011201)