📦 C++ 函数与指针 · 课前预习笔记
> 明天要学的东西叫 “函数”和“指针” ——说白了就是让程序学会分工合作,把大任务拆成小任务,还能直接操作内存地址,写出更灵活、更强大的代码!
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
一、先搞懂:什么是函数?
1. 生活类比
> 你做一道番茄炒蛋:
>
> * 没有函数:把所有步骤都写在 main 里,又长又乱
> * 有函数:把“切番茄”、“打鸡蛋”、“炒菜”分别写成小模块,main 里只需要调用它们
2. 函数的好处
好处 说明 代码复用 同一段代码可以反复调用,不用重复写 分工明确 每个函数只做一件事,逻辑清晰 容易修改 改一个函数就行,不影响其他部分 方便调试 哪里出错就查哪个函数
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
二、函数的定义与调用
1. 函数的定义格式
2. 函数的四个部分
部分 说明 例子 返回值类型 函数返回什么类型的数据 int、double、void(无返回值) 函数名 给函数起个名字,见名知意 add、max、printHello 参数列表 函数需要什么数据 int a, int b 函数体 具体做什么事 { return a + b; }
3. 完整例子
4. 函数的调用流程
> 💡 记住:函数不调用就不执行!定义函数只是告诉电脑“我有这个功能”,调用才是真正使用它。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
三、作用域(SCOPE)
1. 什么是作用域?
> 作用域 = 变量的“势力范围”——变量在哪个范围里有效。
2. 局部变量 VS 全局变量
3. 作用域规则总结
变量类型 定义位置 作用范围 特点 全局变量 所有函数外面 整个程序都能用 任何地方都能访问和修改 局部变量 函数内部 只能在自己函数里用 函数结束就销毁 形参 函数参数列表里 只能在自己函数里用 相当于局部变量
4. 名字冲突(同名变量的优先级)
> 💡 记住:局部变量会“遮蔽”同名的全局变量。就近原则!
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
四、函数的参数传递
1. 值传递(传值)
> 概念:把参数的值复制一份传给函数,函数里改的是副本,不影响原来的变量。
> 💡 值传递就像复印了一份文件,你改复印件,原件不受影响。
2. 地址传递(传指针)
> 概念:把变量的内存地址传给函数,函数通过地址直接操作原来的变量。
> 💡 地址传递就像把房子地址告诉了别人,别人可以直接去你家里改造。
3. 值传递 VS 地址传递
对比项 值传递 地址传递(指针) 传递的是什么 数据的副本 数据的地址 会不会改变原值 ❌ 不会 ✅ 会 写法 func(a, b) func(&a, &b) 形参类型 int a int* a 访问数据 直接用 a 用 *a
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
五、数学函数(CMATH 库)
1. 需要头文件
2. 常用数学函数
函数 功能 例子 max(a, b) 取较大值 max(3, 5) = 5 min(a, b) 取较小值 min(3, 5) = 3 pow(a, b) 计算 aᵇ pow(2, 3) = 8 abs(x) 取绝对值 abs(-5) = 5 sqrt(x) 开平方 sqrt(81) = 9
3. 例子
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
六、指针(了解)
1. 什么是指针?
> 指针 = 存储地址的变量
我们平时定义的变量存的是数据,指针变量存的是数据在内存中的地址。
2. 指针相关的符号
符号 含义 例子 & 取地址:获取变量的地址 &a 得到 a 的地址 * 解引用:获取地址里存的值 *p 得到 p 指向的值
3. 指针的基本使用
4. 指针有什么用?
用途 说明 函数传参 让函数能修改外面的变量(如 swap 函数) 动态内存分配 程序运行时才决定要分配多少内存 数组操作 数组名本身就是指针,可以用指针遍历数组 数据结构 链表、树等数据结构必须用指针
5. 指针和数组的关系
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
📝 快速记忆卡
概念 一句话总结 函数 把代码打包成小模块,可以重复调用 返回值 函数执行完给调用者的结果 参数 函数需要的数据,调用时传进去 作用域 变量的“势力范围”,不能随便访问别人的局部变量 全局变量 所有函数都能访问 局部变量 只能在自己函数里用 值传递 传副本,改了不影响原值 地址传递(指针) 传地址,改了会影响原值 指针 存地址的变量,用 * 取值,用 & 取地址
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
🔥 预习小任务
1. 下面这段代码会输出什么?
2. 指针 p 指向变量 a,怎么通过 p 修改 a 的值?
3. 全局变量和局部变量同名时,谁优先?
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
明天上课带着这些问题来,效果翻倍!🚀