在 C 语言中,函数(Function) 是一段封装了特定功能的可重用代码块,它接收输入(参数)、执行逻辑、可选返回输出(返回值),是程序模块化、代码复用和逻辑解耦的核心机制。
一、函数的核心特性
1.封装性:把完成特定功能的代码打包,隐藏内部实现,只暴露输入输出接口;
2.复用性:定义一次,可在程序中多次调用,避免重复写代码;
3.模块化:将复杂程序拆分为多个小函数,每个函数负责一个小功能,便于维护和调试。
二、函数的分类
C 语言中的函数主要分两类:
- 库函数(系统提供)
由 C 标准库或编译器提供的现成函数,无需自己定义,只需包含对应头文件即可使用。
常见示例:
输入输出:printf()、scanf()(头文件 <stdio.h>);
字符串处理:strlen()、strcpy()(头文件 <string.h>);
数学计算:sqrt()、pow()(头文件 <math.h>)。
- 自定义函数(用户编写)
根据业务需求自己定义的函数,完全由用户控制逻辑,是 C 语言编程的核心。
三、自定义函数的语法结构
一个完整的自定义函数包含 函数声明、函数定义 和 函数调用 三部分:
- 函数定义(核心)
返回值类型 函数名(参数类型1 参数名1, 参数类型2 参数名2, ...) { // 函数体:实现功能的代码
[return 返回值;] // 非void类型必须有return
}
返回值类型 函数执行后返回的数据类型(如int、float、char);无返回值用void
函数名 符合 C 语言标识符规则的名称(如add、calculateArea)
参数列表 函数的输入(可选,无参数写void或空),格式:类型 变量名
函数体
return语句 结束函数并返回值(void 类型函数可省略 return,或写return;)
- 函数声明
告诉编译器 “有这个函数存在”,通常放在主函数前或头文件中(若函数定义在调用之后,必须声明)。
语法:
返回值类型 函数名(参数类型1, 参数类型2, ...); // 可省略参数名,只写类型
- 函数调用
在需要使用函数的地方,通过函数名 + 参数触发执行,格式:
函数名(实参1, 实参2, ...); // 实参需与形参类型、个数、顺序匹配
四、自定义函数示例
示例 1:有参数、有返回值
#include <stdio.h>
int add(int a, int b);
int main() {
// 函数调用:实参为3和5,接收返回值
int result = add(3, 5);
printf("3 + 5 = %d\n", result); // 输出:3 + 5 = 8
return 0;
}
// 函数定义:形参a、b接收实参,返回和
int add(int a, int b) {
return a + b;
}
结果如下:
示例 2:无参数、无返回值
#include <stdio.h>
// 定义void类型函数:无参数、无返回值,仅打印固定年龄
void printAge() {
int age = 25; // 自定义要打印的年龄
printf("%d 岁\n", age);
}
int main() {
// 调用printAge函数,执行打印操作
printAge();
return 0;
}
五、函数的关键概念
形参(形式参数):函数定义时的参数,仅在函数体内有效,是接收实参的 “占位符”;
实参(实际参数):函数调用时传入的具体值 / 变量,会将值传递给形参(C 语言默认是 “值传递”,即形参修改不影响实参);
返回值:通过return语句返回给调用处的值,类型必须与函数声明的返回值类型一致;
函数递归:函数调用自身(需有终止条件,否则会栈溢出),例如计算阶乘:
六、函数的作用
简化代码:将重复逻辑封装,调用即可;
提高可读性:每个函数对应一个功能,代码结构清晰;
便于维护:修改功能只需改对应函数,无需全局修改;
支持分工开发:多人协作时,可按函数模块分工编写。
C 语言的函数是程序的基本组成单元,所有可执行逻辑最终都通过函数(包括main函数,程序入口)实现。掌握 函数的定义、调用和参数传递,是学好 C 语言的核心。