c语言回调函数

 

#include <stdio.h>

// 回调函数,用于在数组中查找特定元素
int search(int arr[], int n, int target, int (*cmp)(int, int))
{
    for (int i = 0; i < n; i++) {
        if (cmp(arr[i], target)) {
            return i;  // 找到目标元素,返回其索引
        }
    }
    return -1;  // 没有找到目标元素
}

// 回调函数,用于比较两个整数是否相等
int equals(int a, int b)
{
    return a == b;
}

int main()
{
    int arr[] = {1, 2, 3, 4, 5};
    int n = sizeof(arr) / sizeof(arr[0]);
    int target = 3;
    int index = search(arr, n, target, equals);  // 使用equals函数作为回调函数
    if (index == -1) {
        printf("目标元素 %d 不存在于数组中\n", target);
    } else {
        printf("目标元素 %d 存在于数组中,其索引为 %d\n", target, index);
    }
    return 0;
}

在这个例子中,我们定义了两个函数,searchequalssearch函数接收一个数组、数组的长度、目标元素和一个用于比较两个元素是否相等的回调函数。equals函数用于比较两个整数是否相等,它返回1(真)或0(假)。

在主函数中,我们定义了一个整数数组和目标元素,然后调用search函数,并将equals函数作为回调函数传递给它。search函数遍历数组中的每个元素,并使用回调函数比较目标元素和数组元素是否相等。如果找到目标元素,search函数返回其索引,否则返回-1。

最后,在主函数中,我们检查search函数的返回值并打印相应的消息。在这个例子中,我们使用了一个简单的回调函数,但在实际的应用程序中,回调函数可能会更加复杂,以满足特定的需求。

int (*cmp)(int, int)中的cmp代表回调函数。这种写法是C语言中声明函数指针的方式。

函数指针实际上是一个变量,用于存储函数的地址。通过声明一个函数指针,我们可以将其作为参数传递给其他函数,使得这个函数可以调用回调函数来完成特定的任务。

search函数的声明中,我们使用了一个指向函数的指针来表示回调函数,它的类型是int (*)(int, int)。其中,括号中的(int, int)表示回调函数的参数列表,而最前面的int *表示返回类型是一个指向int类型的指针。

search函数中,当我们调用cmp函数指针时,我们需要使用括号将它括起来,以指示这是一个函数调用。因此,if (cmp(arr[i], target))这行代码的作用是调用cmp指针所指向的回调函数,并将arr[i]target作为参数传递给它进行比较。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Altre_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值