C语言指针进阶阶段学习总结(函数指针、回调、qsort全梳理) 前言耗时数日完整攻克C语言指针后半段最难板块二级指针、数组指针、字符指针、函数指针、函数指针数组、回调函数、qsort库排序函数结合四则计算器实战项目落地知识点把抽象的指针语法全部转化为可运行代码做一份完整学习复盘记录。一、核心知识点逐条复盘1. 基础指针字符串关键区分1. strlen 统计字符串有效字符长度不计末尾 \0 结束标志2. sizeof 计算变量/数组占用总内存字节包含字符串末尾 \03. 数组作为函数参数传递时数组会被隐式转为首元素指针无法在函数内部计算数组总长度这是初学高频易错点。2. 各类指针变量细致区分重中之重1. 字符指针变量 char* ps存放字符串常量首元素地址字符串常量存放在只读内存区不可修改内容cchar* 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. 函数指针数组将多个同类型函数的地址存入数组语法cint (*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仓库地址