23-c语言函数
本文最后更新于 2026-02-28,文章内容可能已经过时。
C语言函数是执行特定任务的代码模块单元,分为标准库函数(如
printf)和自定义函数,通过定义(指定返回类型、函数名和参数列表)与调用(实参与形参匹配)实现模块化编程,显著提升代码复用性、可读性和可维护性;使用时需遵循单一职责原则、确保参数类型兼容,并正确处理返回值(有返回值用return,无返回值用void),避免函数过长或逻辑复杂。
一、函数的基本概念
函数是C语言中的基本模块单元,设计为执行一项特定任务,其名称通常会反映该任务。C语言中的函数是一段完成特定独立任务的代码片段,具有固定语法格式和调用规则。
核心价值:
- 模块化编程:将大型程序拆解为多个小函数,降低代码复杂度,便于维护和调试
- 代码复用:同一功能的函数可在程序中多次调用,无需重复编写
- 可读性提升:函数名按功能命名(如
max表示最大值、is_leap_year表示判断闰年),使代码逻辑更清晰
二、函数的分类
1. 库函数
- 由C语言标准库(ANSI C规定)提供,编译器厂商实现的现成函数
- 需包含对应头文件(如
#include <stdio.h>、#include <math.h>) - 示例:
- 输入输出函数:
printf()、scanf() - 数学函数:
sqrt()(平方根)、pow()(幂运算) - 字符串操作:
strlen()(长度)、strcpy()(拷贝)
- 输入输出函数:
2. 自定义函数
- 由开发者根据实际需求编写的函数
- 灵活性强,是编程核心
- 示例:实现两个数的乘法、数组排序等
三、函数的定义与语法
1. 函数的基本结构
返回类型 函数名(参数列表) {
// 函数体
// 代码实现
return 返回值; // 如果有返回值
}
2. 函数定义示例
示例1:求两个整数的最大值
int max(int x, int y) {
int z;
z = x > y ? x : y;
return z;
}
示例2:交换两个浮点数(使用指针)
void swap(double *p1, double *p2) {
if (p1 == NULL || p2 == NULL)
return;
double tmp;
tmp = *p1;
*p1 = *p2;
*p2 = tmp;
}
示例3:初始化液晶屏,获取显存入口指针
char *initLCD(void) {
int lcd = open("/dev/fb0", O_RDWR);
struct fb_var_screeninfo vinfo;
ioctl(lcd, FBIOGET_VSCREENINFO, &vinfo);
int bpp = vinfo.bits_per_pixel;
int size = vinfo.xres * vinfo.yres * bpp / 8;
char *fbmem = mmap(NULL, size, PROT_READ, MAP_SHARED, lcd, 0);
return fbmem;
}
四、函数的调用
1. 函数调用的一般形式
函数名(实参表列);
- 如果是调用无参函数,则"实参表列"可以没有,但括号不能省略
- 如果实参列表包含多个实参,则各参数间用逗号隔开
- 实参与形参的个数应相等,类型应一致
2. 函数调用的三种方式
| 调用方式 | 说明 | 示例 |
|---|---|---|
| 函数语句 | 函数调用作为一个语句 | printstar(); |
| 函数表达式 | 函数出现在表达式中 | result = max(a, b); |
| 函数参数 | 函数调用作为另一个函数的参数 | printf("Result: %d", max(a, b)); |
五、函数的参数与返回值
1. 参数传递
- 形参:函数定义时的参数,是函数的输入
- 实参:函数调用时的参数,是实际传递给函数的值
- 实参与形参按顺序对应,一一传递数据
2. 返回值
- 有返回值函数:使用
return语句返回一个值 - 无返回值函数:使用
void作为返回类型,不返回任何值
六、函数的高级特性
1. 内联函数
通过inline关键字声明,编译器会将函数调用替换为函数代码本身,提高性能。
2. 函数指针
函数指针可以存储函数的地址,实现回调函数、动态函数调用等功能。
3. 函数重载
C++中允许函数名相同但参数类型或数量不同的多个函数,C语言不支持函数重载。
七、函数的使用原则
- 单一职责原则:每个函数应只完成一个特定任务
- 命名规范:函数名应清晰反映其功能
- 接口简洁:函数的输入输出接口应简洁明了
- 避免过长函数:复杂算法应分解为多个更简单的函数
八、函数的实际应用示例
1. 库函数应用示例(输入输出)
#include <stdio.h>
int main() {
int age = 25;
float height = 1.75f;
char *name = "Alice";
printf("Name: %s\n", name);
printf("Age: %d, Height: %.2f meters\n", age, height);
return 0;
}
2. 自定义函数应用示例(求阶乘)
#include <stdio.h>
int factorial(int n) {
if (n < 0)
return -1; // 错误处理
if (n == 0)
return 1;
int result = 1;
for (int i = 1; i <= n; i++) {
result *= i;
}
return result;
}
int main() {
int num = 5;
printf("%d! = %d\n", num, factorial(num));
return 0;
}
九、函数的注意事项
- 函数必须先声明或定义后才能被调用
- 调用函数时,实参的类型必须与形参兼容
- 对于数组参数,通常使用指针传递,避免复制整个数组
- 避免函数过于复杂,应保持函数长度适中,执行单一任务
通过正确使用函数,可以大大提高C语言程序的可读性、可维护性和代码复用率,是C语言编程中不可或缺的核心概念。
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 软件从业者Hort
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果

