一、函数的基本概念
定义 函数是独立可复用的代码块,可接收输入、处理数据并返回结果。其逻辑结构包含参数列表和函数体。
功能与分类
- 有参函数: 接受参数(如`int add(int a, int b)`) - 无参函数
- 返回值函数:执行后返回结果(如`int max(int a, int b)`)
- 无返回值函数:仅执行操作(如`void swap(int *x, int *y)`)
二、函数的定义与声明
定义格式 ```c
返回类型 函数名(参数类型 参数名, ...) {
// 函数体
return 表达式;
}
```
- 例如:`int add(int a, int b) { return a + b; }`
- 注意:函数体必须用大括号包裹,且仅能有一个`return`语句
声明方式
- 函数原型: 提前告知编译器返回类型、参数类型及名称 ```c int add(int, int); ``` - 位置
三、函数的调用
基本语法 ```c
函数名(参数值1, 参数值2, ...);
```
- 例如:`int result = add(3, 5);`
- 需传递参数类型匹配的值
特殊说明
- 返回值赋值: 需使用变量接收返回值 ```c int sum = calculate_sum(10, 20); ``` - 无返回值函数
四、参数传递机制
值传递
- 基本数据类型(如`int`)传递副本,修改不影响原变量
- 示例:
```c
void swap(int x, int y) { int temp = x; x = y; y = temp; }
// 调用后原变量不变
```
指针参数
- 通过地址传递,修改原变量
- 示例:
```c
void real_swap(int *x, int *y) { int temp = *x; *x = *y; *y = temp; }
// 调用后原变量改变
```
数组参数
- 以指针形式传递,需注意数组边界
- 示例:
```c
void print_array(int *arr, int len) { for (int i = 0; i < len; i++) printf("%d ", arr[i]); }
```
五、返回值与注意事项
返回值类型
- 与函数声明的返回类型一致(如`int`、`void`)
- 示例:
```c
int max(int a, int b) { return a > b ? a : b; }
```
返回指针的陷阱
- 需确保指针有效且指向可修改内存
- 示例错误:
```c
int* dangerous_func() { int local = 100; return &local; } // 未初始化局部变量
```
六、常见函数示例
标准输入输出
- `printf`:格式化输出(如`printf("Hello, World!\n");`)
- `scanf`:格式化输入(如`scanf("%d", &num);`)
字符串操作
- `strlen`:计算字符串长度(如`strlen(str);`)
- `strcpy`:复制字符串(如`strcpy(dest, src);`)