C语言函数基础学习笔记

在职坐标学习第四天C语言函数基础学习笔记
一、函数的概念
为什么要用函数?
代码复用:避免重复编写相同的代码(如求和、打印菜单)。
模块化:将复杂问题拆解为小的功能块,便于管理和维护。
定义:是一段具有特定功能的代码块,可以在程序中被重复调用。
生活中的类比
函数 = 自动售货机/榨汁机
函数名 = 机器的名字(招牌)
参数列表 = 投料口(投入原材料)
函数体 = 机器内部结构(加工过程)
返回类型 = 出汁口(产出结果)
二、函数的格式与定义
标准格式
返回类型 函数名(参数列表) {
函数体;
return 值;
}
四大组成部分详解
返回类型:函数执行完后的结果类型。注意:void表示无返回值;return类型必须与返回类型匹配。
函数名:标识符,需见名知义。遵循标识符规则(字母/数字/下划线,非数字开头)。
参数列表:函数需要的“原材料”。多个参数用逗号,分隔;无参数时,强烈建议显式写上 void(明确告知编译器无参数)。
函数体:具体的执行代码。必须用 {} 包裹;return 后的代码不会被执行。
重要规则
不能嵌套定义:C语言中函数是平级的,不能在函数A内部定义函数B。
命名规范:建议使用驼峰命名法(如 getSum)或下划线命名法。
三、函数的调用与声明
调用方式
格式:函数名(实参);
内存模型:
入栈:调用函数时,函数进入栈顶,CPU执行栈顶函数。
出栈:函数执行完毕(遇到 } 或 return),释放内存,回到调用处。
函数声明
作用:告诉编译器“后面有这个函数”,解决定义在调用之后的问题。
格式:返回类型 函数名(参数列表); (注意末尾有分号)
位置:通常在 main 函数之前或头文件中。
形参与实参
形参 (形式参数):定义函数时的参数,当作局部变量使用。
实参 (实际参数):调用函数时传递的具体值或变量。
传递规则:实参的值赋给形参(值传递)。
变参函数 (拓展)
允许接受可变数量的参数,如 printf。需包含头文件 <stdarg.h>。
(注:初学者了解即可,后续深入学习指针后再掌握)
四、变量的作用域与生命周期
局部变量:位于函数内/复合语句内,仅在函数/语句内有效,随函数调用创建、结束销毁,存储在栈区。
全局变量:位于函数外,整个程序(文件)通用,生命周期为程序开始到结束,存储在静态存储区。
静态变量:由 static 修饰,函数内有效(局部)或文件内(全局),生命周期为程序开始到结束(只初始化一次),存储在静态存储区。
注意:static 修饰的局部变量,生命周期延长至程序结束,但作用域不变。
五、拓展:递归
定义
函数在运行时调用自己。
核心要素
递归头 (终止条件):必须有结束递归的条件。如果没有递归头,程序会一直调用自己,最终耗尽内存导致栈溢出崩溃。
递归体:缩小问题规模,向终止条件靠近。
经典案例
阶乘:n! = n * (n-1)!
猴子吃桃:逆推法,第n天桃子数 = (第n+1天桃子数 + 1) * 2。
六、核心知识点速记卡
函数定义:返回类型+函数名+(参数){函数体},不能嵌套定义。
void:无返回值,函数体内可省略 return 或写 return;。
函数声明:写在调用前,格式同定义但加分号 ;。
形参vs实参:形参是局部变量,实参传给形参(值传递)。
全局变量:定义在函数外,全程序通用,常用于ATM余额等共享数据。
静态变量:static 修饰,生命周期贯穿程序始终,只初始化一次。
递归:函数自己调自己,必须有终止条件,否则栈溢出。
ATM项目:while循环+switch选择+全局变量共享数据。
学习建议:
多动手写:不要只看代码,一定要自己敲一遍函数定义和调用的过程。
画内存图:尝试画出函数调用时的入栈和出栈过程,这有助于理解局部变量和递归。
循序渐进:递归思想比较抽象,初期可以先死记硬背“递归头+递归体”的模板,慢慢培养语感。

posted @ 2026-07-24 18:25  浅若曦曦~  阅读(11)  评论(3)    收藏  举报