目录
函数是C语言中用于执行特定任务的一段代码。函数的基本定义包括返回类型、函数名、参数列表和函数体。
函数定义
返回类型 函数名(参数类型 参数名, ...) {
// 函数体
return 返回值; // 可选
}
示例
int add(int a, int b) {
return a + b;
}
函数声明
函数声明通常放在文件的开头或者头文件中,用于告诉编译器函数的存在。
int add(int a, int b);
函数传递参数
函数可以通过参数列表传递参数。参数传递有按值传递和按引用传递(通过指针)。
按值传递
按值传递时,函数接收的是参数的副本,原变量不会被修改。
void modifyValue(int x) {
x = 10;
}
int main() {
int a = 5;
modifyValue(a);
printf("%d\n", a); // 输出5,a未被修改
return 0;
}
按引用传递
通过指针传递参数,可以修改原变量的值。
void modifyValue(int *x) {
*x = 10;
}
int main() {
int a = 5;
modifyValue(&a);
printf("%d\n", a); // 输出10,a被修改
return 0;
}
函数传递数组参数
数组作为参数传递时,实际上是传递了数组的指针,可以在函数中修改数组的内容。
示例
void modifyArray(int arr[], int size) {
for (int i = 0; i < size; i++) {
arr[i] = i * 2;
}
}
int main() {
int array[5] = {1, 2, 3, 4, 5};
modifyArray(array, 5);
for (int i = 0; i < 5; i++) {
printf("%d ", array[i]); // 输出0 2 4 6 8
}
return 0;
}
递归函数
递归函数是指在其定义中调用自身的函数。递归需要有一个终止条件,否则会导致无限递归。
示例:计算阶乘
int factorial(int n) {
if (n == 0) {
return 1;
} else {
return n * factorial(n - 1);
}
}
int main() {
int result = factorial(5);
printf("%d\n", result); // 输出120
return 0;
}
局部和全局变量
局部变量
局部变量在函数内部声明,只在函数内部可见和有效。
void func() {
int local = 10; // 局部变量
}
全局变量
全局变量在所有函数外部声明,在整个程序中可见和有效。
int global = 10; // 全局变量
void func() {
global = 20;
}
静态变量
静态变量在函数内部声明,但其值在函数调用间保持。
void func() {
static int count = 0; // 静态变量
count++;
printf("%d\n", count);
}
int main() {
func(); // 输出1
func(); // 输出2
return 0;
}
内联函数
内联函数使用inline
关键字声明,提示编译器将函数体嵌入到每个调用点,以减少函数调用的开销。
inline int add(int a, int b) {
return a + b;
}
可变参数函数
可变参数函数使用stdarg.h
头文件提供的宏来处理不定数量的参数。
示例
#include <stdarg.h>
#include <stdio.h>
void printNumbers(int count, ...) {
va_list args;
va_start(args, count);
for (int i = 0; i < count; i++) {
printf("%d ", va_arg(args, int));
}
va_end(args);
printf("\n");
}
int main() {
printNumbers(3, 1, 2, 3); // 输出1 2 3
return 0;
}
函数指针
函数指针是指向函数的指针,可以用于实现回调函数和动态函数调用。
示例
int add(int a, int b) {
return a + b;
}
int subtract(int a, int b) {
return a - b;
}
int main() {
int (*operation)(int, int);
operation = add;
printf("Add: %d\n", operation(5, 3)); // 输出8
operation = subtract;
printf("Subtract: %d\n", operation(5, 3)); // 输出2
return 0;
}
回调函数
回调函数是一种通过函数指针调用的函数,常用于事件驱动编程和异步编程。
示例
#include <stdio.h>
void processArray(int *arr, int size, void (*process)(int *)) {
for (int i = 0; i < size; i++) {
process(&arr[i]);
}
}
void increment(int *num) {
(*num)++;
}
int main() {
int array[5] = {1, 2, 3, 4, 5};
processArray(array, 5, increment);
for (int i = 0; i < 5; i++) {
printf("%d ", array[i]); // 输出2 3 4 5 6
}
return 0;
}