C 语言函数指针示例127


函数指针是 C 语言中强大的工具,它使程序员能够将函数作为参数传递给其他函数或将它们存储在数据结构中。这种灵活性在许多不同的应用程序中很有用,包括回调、动态函数调度和事件处理。

函数指针的基础

函数指针是一个变量,它存储指向函数的地址。在 C 语言中,函数指针的声明类似于普通函数的声明,但它使用星号 (*) 作为返回类型。例如:```c
int (*fptr)(int, int);
```

此声明创建一个名为 fptr 的函数指针,它指向一个接受两个整形参数并返回一个整形的函数。

使用函数指针

函数指针可以通过多种方式使用。一种常见的方法是将它们作为参数传递给其他函数。例如,以下函数使用函数指针将数字列表 sort:```c
void sort(int *arr, int size, int (*compare)(int, int)) {
// 对数组进行排序
for (int i = 0; i < size - 1; i++) {
for (int j = i + 1; j < size; j++) {
if (compare(arr[i], arr[j]) > 0) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
```

sort 函数接受三个参数:要排序的数组(arr)、数组的大小(size)以及一个函数指针(compare),该函数指针指向一个比较两个整数的函数。sort 函数通过使用 compare 函数指针多次调用比较函数来对数组进行排序,直到数组中所有元素都被正确排序。

指向成员函数的函数指针

函数指针还可以指向成员函数。这允许您将成员函数作为参数传递给其他函数或将它们存储在数据结构中。要指向成员函数的函数指针,请使用以下语法:```c
int (Class::*fptr)(int);
```

其中 Class 是指向成员函数所属类的指针。

示例:回调

回调是函数指针的一个常见应用程序。回调是当一个函数被另一个函数调用作为参数时发生的。这允许您在不同的函数之间传递自定义行为。例如,以下代码使用回调函数来打印数组中的每个元素:```c
void print_array(int *arr, int size, void (*print_element)(int)) {
// 遍历数组并打印每个元素
for (int i = 0; i < size; i++) {
print_element(arr[i]);
}
}
void print_int(int n) {
printf("%d ", n);
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int size = sizeof(arr) / sizeof(arr[0]);

// 使用 print_int 函数作为回调
print_array(arr, size, print_int);

return 0;
}
```

在上面的示例中,print_array 函数接受三个参数:要打印的数组(arr)、数组的大小(size)以及一个函数指针(print_element),该函数指针指向一个打印单个元素的函数。print_int 函数是一个回调函数,它用来打印数组中的每个元素。

函数指针是 C 语言中强大的工具,它们使程序员能够创建灵活且可重用的代码。通过理解函数指针的基础和用途,您可以充分利用它们在您的应用程序中。

2024-10-23


上一篇:图像处理中的 C 语言:输出图像

下一篇:C 语言中使用 printf() 函数输出浮点数