回调函数及C++例程
时间: 2023-09-15 16:19:21 浏览: 99
回调函数是指在程序执行过程中,将某个函数的地址作为参数传递给另一个函数,在特定条件下由后者调用执行。在C语言中,回调函数通常是通过函数指针来实现的。
以下是一个简单的C语言例程,演示了回调函数的使用:
```c
#include <stdio.h>
// 回调函数的定义
typedef int (*CompareFunc)(int, int);
// 排序函数,使用回调函数来比较两个数的大小
void sort(int arr[], int size, CompareFunc compare)
{
for (int i = 0; i < size - 1; i++)
{
for (int j = 0; j < size - i - 1; j++)
{
if (compare(arr[j], arr[j + 1]) > 0)
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
// 比较函数,用于从小到大排序
int ascending(int a, int b)
{
return a - b;
}
// 比较函数,用于从大到小排序
int descending(int a, int b)
{
return b - a;
}
int main()
{
int arr[] = {5, 2, 8, 1, 9};
int size = sizeof(arr) / sizeof(arr[0]);
// 使用回调函数进行从小到大排序
sort(arr, size, ascending);
printf("从小到大排序结果: ");
for (int i = 0; i < size; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
// 使用回调函数进行从大到小排序
sort(arr, size, descending);
printf("从大到小排序结果: ");
for (int i = 0; i < size; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
在上面的例程中,定义了一个`sort`函数,它接受一个整数数组、数组大小和一个回调函数作为参数。`sort`函数根据回调函数的比较结果来进行排序。然后,通过定义两个不同的比较函数`ascending`和`descending`,分别实现了从小到大和从大到小的排序。
在`main`函数中,首先使用回调函数`ascending`进行排序,并输出结果,然后使用回调函数`descending`进行排序,并再次输出结果。
通过回调函数,我们可以在不修改原始函数的情况下,动态地改变其行为,提高代码的灵活性和复用性。
阅读全文