6.1 函数定义与声明
在C语言中,函数是执行特定任务的一系列代码。要使用一个函数,首先需要对其进行声明,然后定义。
6.1.1 函数声明
函数声明告诉编译器函数的名称、返回类型以及参数列表。其基本语法如下:
返回类型 函数名(参数类型 参数名, 参数类型 参数名, ...);
例如:
int add(int a, int b);
6.1.2 函数定义
函数定义包含了函数体,即函数的具体实现。其基本语法如下:
返回类型 函数名(参数类型 参数名, 参数类型 参数名, ...) {
// 函数体
}
例如:
int add(int a, int b) {
return a + b;
}
6.2 参数传递
在C语言中,函数可以通过值传递和引用传递来传递参数。
6.2.1 值传递
值传递是将实参的值复制到形参中。这意味着形参的任何修改都不会影响实参。
void swap(int a, int b) {
int temp = a;
a = b;
b = temp;
}
int main() {
int x = 10, y = 20;
swap(x, y);
// x 和 y 的值仍然是 10 和 20
}
6.2.2 引用传递
引用传递是通过指针实现的。这意味着形参和实参指向同一内存地址,任何对形参的修改都会影响实参。
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
int main() {
int x = 10, y = 20;
swap(&x, &y);
// x 和 y 的值现在是 20 和 10
}
6.3 函数递归
函数递归是指函数在执行过程中调用自身。递归通常用于解决可以分解为子问题的问题。
int factorial(int n) {
if (n == 0)
return 1;
else
return n * factorial(n - 1);
}
6.4 闭包与匿名函数
闭包是一种包含自由变量的函数。匿名函数是一种没有名称的函数。
6.4.1 闭包
int multiplier = 2;
int double(int x) {
return x * multiplier;
}
// double 函数是一个闭包,因为它使用了自由变量 multiplier
6.4.2 匿名函数
int (*create_multiplier(int factor))(int) {
return [factor](int x) { return x * factor; };
}
int main() {
int (*double_val)(int) = create_multiplier(2);
int result = double_val(10);
// result 的值为 20
}
6.5 函数指针
函数指针是指向函数的指针。它们可以用于传递函数作为参数或返回函数。
6.5.1 函数指针作为参数
void print(const char *str) {
printf("%s\n", str);
}
int main() {
const char *message = "Hello, World!";
print(message);
// 输出: Hello, World!
}
6.5.2 函数指针作为返回值
int add(int a, int b) {
return a + b;
}
int main() {
int (*sum)(int, int) = add;
int result = sum(2, 3);
// result 的值为 5
}
通过以上内容,我们可以深入了解C语言函数的精髓。掌握这些关键点将有助于我们更好地编写高效的C语言程序。
