你还在用这种方法吗
问题:重复代码太多,每次输出年龄都要写 3 行printf
优化此代码
#include <stdio.h>
// 封装输出年龄的函数(复用重复逻辑)
void printAge(int age) {
printf("-----------------\n");
printf("年龄是:%d\n", age);
printf("-----------------\n");
}
int main() {
int age = 18;
int age1 = 19;
int age2 = 20;
// 直接调用函数,简洁高效
printAge(age);
printAge(age1);
printAge(age2);
return 0;
}
运行结果和原结果相同
在这段优化后的代码中,核心运用了 C 语言函数
一、核心:函数的封装与复用(最核心)
这是本次优化的核心目的,也是 C 语言模块化编程的核心思想:
-
函数封装:将 “输出年龄 + 分隔线” 的重复逻辑(3 行printf)封装到printAge函数中,实现 “一段逻辑、一次定义、多次调用”;
-
代码复用:main函数中通过printAge(age)、printAge(age1)等调用,避免重复编写相同代码,符合 “DRY(Don't Repeat Yourself)” 编程原则。
二、函数的基础语法规则
1. 函数定义规范
◦ 严格遵循 C 语言函数定义格式:返回值类型 函数名(参数列表) { 函数体 }
◦ 返回值类型:void(无返回值,仅执行逻辑);
◦ 函数名:printAge(符合标识符规则:字母组成、见名知意);
◦ 形参:int age(局部变量,仅函数内有效,接收调用时传递的年龄值);
◦ 函数体:花括号包裹的 3 行printf,实现具体输出逻辑。
2. 函数调用规则
◦ 调用格式:函数名(实参)(如printAge(age));
◦ 实参 / 形参匹配:实参(age/age1/age2,int类型)与形参(int age)的数量、类型、顺序完全一致(C 语言调用的核心要求);
◦ 调用流程:程序执行到printAge(age)时,跳转到printAge函数体执行,执行完后回到main函数继续执行下一行。
三、传值调用(C 语言默认参数传递方式)
printAge(age)属于传值调用:
• 调用时,实参age(如 18)的值会拷贝一份给形参age;
• 形参age是函数内的局部变量,修改它不会影响实参(本例中仅读取形参值,未修改,体现了传值调用 “只读不改” 的特点)。
四、局部变量特性
• 形参int age是printAge函数的局部变量:仅在printAge函数体内部有效,函数执行结束后会被销毁,与main函数中的age/age1等变量同名但互不干扰(C 语言 “局部作用域” 规则);
• main函数中的age/age1/age2也是局部变量,仅在main函数内有效。
五、库函数的使用(基础支撑)
代码中用到的printf是 C 语言标准库函数:
• 需通过#include <stdio.h>引入头文件(告诉编译器printf的声明)
• 属于有参无返回值的库函数,用于格式化输出,是 C 语言 I/O 操作的基础。