函数是一组一起执行一个任务的语句。每个 C 程序都至少有一个函数,即主函数 main(),所有简单的程序都可以定义其他额外的函数。
1. 函数定义
一个 C 函数由以下部分组成:
- 返回类型:函数返回的数据类型。如果函数不返回值,则其返回类型为
void。 - 函数名称:这是函数的实际名称。
- 参数:传递给函数的变量,称为实际参数。参数列表可以为空。
- 函数体:包含一组定义函数执行任务的语句。
语法:
返回类型 函数名称(参数列表) {
函数体
}
示例:
#include <stdio.h>
// 函数声明
int max(int num1, int num2);
int main() {
// 局部变量声明
int a = 100;
int b = 200;
int ret;
// 调用函数以获取最大值
ret = max(a, b);
printf("最大值 : %d\n", ret);
return 0;
}
// 函数返回两个数中较大的那个数
int max(int num1, int num2) {
// 局部变量声明
int result;
if (num1 > num2)
result = num1;
else
result = num2;
return result;
}
2. 函数声明
函数声明告诉编译器函数的名称、返回类型和参数。函数声明在调用函数之前是必需的。
语法:
返回类型 函数名称(参数类型);
示例:
int max(int num1, int num2);
3. 调用函数
创建函数后,可以在任何地方调用它。
示例:
int main() {
int ret = max(100, 200);
}
4. 函数参数
函数参数允许向函数传递信息,使函数更具灵活性和功能性。以下是关于函数参数的详细介绍:
4.1 参数类型
函数可以接受多种类型的参数,包括但不限于整数、浮点数、字符、字符串和指针。参数的类型必须在函数声明和定义时指定。
示例:
void printMessage(int times, char symbol);
这里,printMessage 函数接受一个整数参数 times 和一个字符参数 symbol。
4.2 形式参数与实际参数
- 形式参数:在函数定义中声明的参数,作为局部变量存在。
- 实际参数:在函数调用时提供给函数的值。
示例
// 函数定义
void display(int num) {
printf("Number: %d\n", num);
}
int main() {
int a = 5;
// 函数调用
display(a); // 'a' 是实际参数
}
这里,num 是形式参数,而 a 是实际参数。
4.3 参数传递方式
- 按值传递:将实际参数的值复制到形式参数。在函数内部,形式参数的改变不会影响实际参数。
- 按引用传递:通过指针传递参数的地址。在函数内部,形式参数的改变会影响实际参数。
示例:按值传递
void swap(int x, int y) {
int temp = x;
x = y;
y = temp;
}
在这个示例中,swap 函数的改变不会影响原始变量。
示例:按引用传递
void swap(int *x, int *y) {
int temp = *x;
*x = *y;
*y = temp;
}
在这个示例中,通过传递指针,swap 函数可以改变原始变量的值。
4.4 默认参数
C 语言不支持默认参数。这是 C++ 提供的功能,在 C 语言中,每个参数都必须显式地传递。
4.5 可变数量的参数
C 语言支持可变数量的参数,通常通过 <stdarg.h> 头文件中定义的宏来处理。
示例
#include <stdarg.h>
void printNumbers(int num, ...) {
va_list args;
va_start(args, num);
for (int i = 0; i < num; i++) {
int value = va_arg(args, int);
printf("%d\n", value);
}
va_end(args);
}
int main() {
printNumbers(3, 1, 2, 3);
}
在这个示例中,printNumbers 函数可以接受可变数量的整数参数。