函数与指针进阶
看懂函数类型、指针语义与运行时内存模型
按 空格/→ 演示下一步
全部页面点击任意一页,跳回舞台从这页播放
函数与指针进阶
看懂函数类型、指针语义与运行时内存模型
编译预处理
前几页讲的函数调用、指针解引用,都是运行时行为。但C代码在编译前还要过预处理这一关——它决定了编译器最终看到什么。
把全文"深度学习"改成"机器学习"——纯字符串操作,不理解含义,预处理器也一样
命令行参数
上一节我们讲过指针数组在函数间的传递;今天换个方向——程序从命令行「接过来」的参数,本质也是一束指针,由操作系统和 shell 提前摆好。
前台把整句地址按空格撕成几条,argc 是条数,argv 是那叠条
数组与函数
上页我们讲了函数怎么接收指针,指针能指向单个变量,也能指向一块连续内存——也就是数组。这一页我们看数组和函数打交道时,内部到底发生了什么。
快递只送到门口给个地址(首指针),衣柜几层几件(长度、第二维)得另外告知
指针与函数
上页我们把数组传给函数时,函数收到的其实是首地址——指针在参数传递里无处不在。这页再深一层:函数本身能不能也被指针指?
编号不是菜本身,但点编号就能拿到对应那道菜
数据的动态管理
之前我们用的数组和局部变量,大小在编译时就定死了。但现实中你常常不知道用户会输入多少条数据——这就要靠运行时向系统「借」内存,用完再「还」。
申请即租、free 即退租;忘退是泄漏,退错是 double free
二级C考点解析之指针与函
二级C考点解析之指针与函数:定义、要点与典型应用
二级C考点解析之编译预处
前面我们了解了预处理的基本流程:源代码先被「改写」一份,再交给编译器。这页我们换到考试视角:三类指令怎么考、宏和函数怎么区分、哪些坑年年都出。
把「约等于」换成「=」、跳过某段、把模板拉进来——正式批改前先做完这些
本节要点
串联本节知识点,给出记忆锚点与易错提醒
课后思考
先自己琢磨,再看参考答案。三问分别考察核心区分、实际应用与边界陷阱。
参考答案指针函数是「返回值为指针的函数」;函数指针是「指向函数的指针变量」。关键看「指针」二字修饰的是返回值,还是函数本身。
参考答案把「比较规则」抽成独立函数,用函数指针作为参数传进去。排序时按传入的指针决定大小关系,一套代码就能处理多种数据类型。
参考答案不能。局部变量在函数返回时内存即被回收,指针指向的地址成为「野指针」,访问是未定义行为。这也是为什么动态内存要用 malloc 而不能依赖局部变量。