0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

为什么不需要给回调函数传递参数

学益得智能硬件 来源:学益得智能硬件 2025-04-15 10:11 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

回调函数是C语言里面一个重要机制。

关于回调函数,好多同学存在一个问题,使用回调函数的时候,为什么不需要给函数传递参数?

比如这样一个代码:

#include


voidsort(inta[],intsize,int(*p)(int,int))
{
 inti, j;
 for(i =0; i < size - 1; i++)
    {
        for (j = 0; j < size - 1 - i; j++)
        {
            if (p(a[j], a[j + 1]))  
            {
                int t = a[j];
                a[j] = a[j + 1];
                a[j + 1] = t;
            }
        }
    }
}


int less(int x, int y)
{
    return (x > y) ?1:0;
}


intgreater(intx,inty)
{
 return(x < y) ? 1 : 0;
}


int main()
{
    int a[10] = {1, 0, 4, 7, 2, 9, 5, 3, 8, 6};


    sort(a, 10, greater);


    for (int i = 0; i < 10; i++)
    {
        printf("%d ", a[i]);
    }
    printf("
");


    return 0;
}

我们模仿C语言的 qsort 函数,实现了一个冒泡排序算法,它既能从小到大排序,也能从大到小排序,取决与最后一个参数。

sort(a,10, greater);

这个参数既可以是 greater,也可以是 less,很显然,greater 或者 less 都是一个函数。

那么问题来了,这个地方使用 greater,为什么不需要给 greater 传递两个参数,写成这样:

sort(a,10, greater(1,2));

如果写成这样,那就大错特错。这个意思是,先调用 greater,把函数的返回值作为 sort 的第三个参数,要么是 0 要么 1。

很显然,这边要求第三个参数是指针,传 0 或者 1 肯定不行。

那使用 greater 函数的时候,两个参数是如何传过去的?

其实这个地方只需要提供一个地址,就是接下来要调用的函数在哪?而函数名刚好就是函数的入口地址。

在 sort 函数内部,会通过这个地址来调用函数,就是这行代码,不是直接调用 greater,而是通过函数指针来调用,同时给他传递了两个参数。

如果调用 sort 的时候,传递的是 less,那函数指针 p 就指向了函数 less,这里就相当于间接调用了 less 函数。

所以回调函数在使用的时候,千万不能传参,加上括号,意思就变了。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    183

    文章

    7642

    浏览量

    144622
  • 代码
    +关注

    关注

    30

    文章

    4941

    浏览量

    73151
  • 回调函数
    +关注

    关注

    0

    文章

    94

    浏览量

    12114

原文标题:使用回调函数,为什么不用传参数

文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    一文详解C语言函数指针与函数

    在讲函数之前,我们需要了解函数指针。
    发表于 10-19 09:34 1591次阅读

    C语言里面的函数指针和函数

    在讲函数之前,我们需要了解函数指针。
    发表于 12-13 10:28 992次阅读

    函数小结

    调用对应的函数)的这个过程就是函数回调过程,被函数称为
    发表于 07-05 01:51

    请问LWIP中的函数如何传递参数

    :arg这个参数是哪里传来的呢?在网上搜索回函数的资料,似乎都没有明确讲解过函数
    发表于 03-27 04:35

    C 语言函数详解

    有没有觉得很灵活?并且丝毫不需要修改库函数的实现,这就是解耦。再仔细看看,主函数函数是在同
    发表于 04-08 10:36

    ajax方法名使用什么事件,ajax的函数和匿名函数 精选资料分享

    1.什么是js函数一. 函数的作用js代码会至上而下一条线执行下去,但是有时候我们
    发表于 09-01 07:15

    如何将对象传递给BLE函数

    中访问该类的成员对象。我希望将 this 指针作为参数传递,但寄存器函数需要特定的结构。有什么方法可以将会员数据放入
    发表于 04-13 06:12

    LabWindows/CVI 程序 函数设计

    函数是系统框架设计中非常重要的一种手段,所谓函数(callback )是指一个通过
    发表于 05-03 16:54 1.2w次阅读
    LabWindows/CVI 程序 <b class='flag-5'>回</b><b class='flag-5'>调</b><b class='flag-5'>函数</b>设计

    函数的详细资料说明

    异步事件的处理,首先将异步事件发生时需要执行的代码编写成一个函数,并将该函数注册成为函数,这
    发表于 02-28 08:00 6次下载
    <b class='flag-5'>回</b><b class='flag-5'>调</b><b class='flag-5'>函数</b>的详细资料说明

    C语言函数函数

    来源:嵌入式客栈 1 什么是函数?首先什么是呢? 我的理解是:把一段可执行的代码像参数
    的头像 发表于 09-11 09:57 4683次阅读

    详解函数的概念及使用步骤

    函数就是一个被作为参数传递函数。在C语言中,
    的头像 发表于 05-26 15:20 4654次阅读

    一文详解C/C++函数

    首先看一下函数的官方解释:函数就是一个通过函数
    的头像 发表于 02-12 09:20 2241次阅读

    函数指针和函数的使用方法

    了解开发语言的朋友应该都会对函数有所了解,在很多的程序开发语言中都能看到的身影。很多场景下,当某个条件成立以后我们希望代码执行某些指
    的头像 发表于 04-10 15:08 1720次阅读

    C语言技巧之函数

    在讲函数之前,我们需要了解函数指针。
    的头像 发表于 04-18 11:50 1307次阅读

    函数(callback)是什么?函数的实现方法

    函数是一种特殊的函数,它作为参数传递给另一个函数
    发表于 03-12 11:46 4570次阅读