C语言 | 什么是函数

105 阅读4分钟

在 C 语言中,函数(Function) 是一段封装了特定功能的可重用代码块,它接收输入(参数)、执行逻辑、可选返回输出(返回值),是程序模块化、代码复用和逻辑解耦的核心机制。

一、函数的核心特性

1.封装性:把完成特定功能的代码打包,隐藏内部实现,只暴露输入输出接口;

2.复用性:定义一次,可在程序中多次调用,避免重复写代码;

3.模块化:将复杂程序拆分为多个小函数,每个函数负责一个小功能,便于维护和调试。

二、函数的分类

C 语言中的函数主要分两类:

  1. 库函数(系统提供)

由 C 标准库或编译器提供的现成函数,无需自己定义,只需包含对应头文件即可使用。

常见示例:

输入输出:printf()、scanf()(头文件 <stdio.h>);

字符串处理:strlen()、strcpy()(头文件 <string.h>);

数学计算:sqrt()、pow()(头文件 <math.h>)。

  1. 自定义函数(用户编写)

根据业务需求自己定义的函数,完全由用户控制逻辑,是 C 语言编程的核心。

三、自定义函数的语法结构

一个完整的自定义函数包含 函数声明、函数定义 和 函数调用 三部分:

  1. 函数定义(核心)
返回值类型 函数名(参数类型1 参数名1, 参数类型2 参数名2, ...) { // 函数体:实现功能的代码 
[return 返回值;] // 非void类型必须有return 
}


返回值类型 函数执行后返回的数据类型(如int、float、char);无返回值用void

函数名 符合 C 语言标识符规则的名称(如add、calculateArea)

参数列表 函数的输入(可选,无参数写void或空),格式:类型 变量名

函数体

return语句 结束函数并返回值(void 类型函数可省略 return,或写return;)

  1. 函数声明

告诉编译器 “有这个函数存在”,通常放在主函数前或头文件中(若函数定义在调用之后,必须声明)。

语法:

返回值类型 函数名(参数类型1, 参数类型2, ...);  // 可省略参数名,只写类型




  1. 函数调用

在需要使用函数的地方,通过函数名 + 参数触发执行,格式:

函数名(实参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;
}



结果如下:

image.png

image.png

示例 2:无参数、无返回值

#include <stdio.h>

// 定义void类型函数:无参数、无返回值,仅打印固定年龄
void printAge() {
    int age = 25;  // 自定义要打印的年龄
    printf("%d 岁\n", age);
}

int main() {
    // 调用printAge函数,执行打印操作
    printAge();
    return 0;
}





image.png

五、函数的关键概念

形参(形式参数):函数定义时的参数,仅在函数体内有效,是接收实参的 “占位符”;

实参(实际参数):函数调用时传入的具体值 / 变量,会将值传递给形参(C 语言默认是 “值传递”,即形参修改不影响实参);

返回值:通过return语句返回给调用处的值,类型必须与函数声明的返回值类型一致;

函数递归:函数调用自身(需有终止条件,否则会栈溢出),例如计算阶乘:

六、函数的作用

简化代码:将重复逻辑封装,调用即可;

提高可读性:每个函数对应一个功能,代码结构清晰;

便于维护:修改功能只需改对应函数,无需全局修改;

支持分工开发:多人协作时,可按函数模块分工编写。

C 语言的函数是程序的基本组成单元,所有可执行逻辑最终都通过函数(包括main函数,程序入口)实现。掌握 函数的定义、调用和参数传递,是学好 C 语言的核心。