跳到主要内容

C 语言函数参数

在C语言中,函数是程序的基本构建块之一。函数参数是函数定义和调用时传递的数据,它们使得函数能够处理不同的输入并返回相应的结果。理解函数参数的概念对于编写灵活且可重用的代码至关重要。

什么是函数参数?

函数参数是传递给函数的值或变量,用于在函数内部执行操作。参数可以是基本数据类型(如 intfloatchar 等),也可以是复杂的数据结构(如数组、指针、结构体等)。函数参数分为两种类型:

  1. 形式参数(Formal Parameters):在函数定义中声明的参数。
  2. 实际参数(Actual Parameters):在函数调用时传递给函数的具体值或变量。

函数参数的基本用法

1. 值传递

在C语言中,默认情况下,函数参数是通过值传递的。这意味着函数接收的是实际参数的副本,而不是实际参数本身。因此,函数内部对参数的修改不会影响原始数据。

c
#include <stdio.h>

void increment(int num) {
num++;
printf("Inside function: %d\n", num);
}

int main() {
int num = 5;
increment(num);
printf("Outside function: %d\n", num);
return 0;
}

输出:

Inside function: 6
Outside function: 5

在这个例子中,increment 函数接收 num 的副本,并在函数内部对其进行修改。然而,原始变量 num 的值在函数外部保持不变。

2. 引用传递

虽然C语言不支持直接的引用传递,但可以通过指针来实现类似的效果。通过传递变量的地址,函数可以修改原始数据。

c
#include <stdio.h>

void increment(int *num) {
(*num)++;
printf("Inside function: %d\n", *num);
}

int main() {
int num = 5;
increment(&num);
printf("Outside function: %d\n", num);
return 0;
}

输出:

Inside function: 6
Outside function: 6

在这个例子中,increment 函数接收 num 的地址,并通过指针修改了原始变量的值。

实际应用场景

1. 交换两个变量的值

交换两个变量的值是函数参数的一个常见应用场景。通过传递指针,函数可以修改原始变量的值。

c
#include <stdio.h>

void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}

int main() {
int x = 10, y = 20;
printf("Before swap: x = %d, y = %d\n", x, y);
swap(&x, &y);
printf("After swap: x = %d, y = %d\n", x, y);
return 0;
}

输出:

Before swap: x = 10, y = 20
After swap: x = 20, y = 10

2. 计算数组的平均值

通过传递数组和数组大小作为参数,函数可以计算数组的平均值。

c
#include <stdio.h>

float average(int arr[], int size) {
int sum = 0;
for (int i = 0; i < size; i++) {
sum += arr[i];
}
return (float)sum / size;
}

int main() {
int arr[] = {1, 2, 3, 4, 5};
int size = sizeof(arr) / sizeof(arr[0]);
printf("Average: %.2f\n", average(arr, size));
return 0;
}

输出:

Average: 3.00

总结

函数参数是C语言中非常重要的概念,它们使得函数能够处理不同的输入并返回相应的结果。通过值传递和引用传递(通过指针),函数可以灵活地操作数据。理解并掌握函数参数的用法,对于编写高效、可重用的代码至关重要。

附加资源与练习

  • 练习1:编写一个函数,接收两个整数作为参数,并返回它们的最大公约数(GCD)。
  • 练习2:编写一个函数,接收一个字符串作为参数,并返回字符串的长度。
  • 练习3:编写一个函数,接收一个整数数组和数组大小作为参数,并返回数组中的最大值。

通过完成这些练习,你将进一步巩固对C语言函数参数的理解和应用能力。