首页 > 编程知识 正文

c语言指针用法举例,c语言callback函数

时间:2023-05-06 06:35:10 阅读:149325 作者:860

文章的目录函数指针作为函数参数(回调函数)回调函数的概念,一般有三种调用方法回调函数的作用回调函数调用时间回调函数的语法。 1 .简单的函数类型是无参数、无返回值的函数。 2 .完整形式的回调函数注:代码示例:模拟计算机

函数指针函数参数(回调函数) )。

除了常规变量外,函数参数还可以实现函数指针变量或回调函数。

回调是指模块a在模块b的某个函数b ()中执行一定的功能,但函数b ) )自身无法完成所有功能,而必须反过来调用模块a的某个函数a ) )来完成。 这个a ) )是回调函数。

回调函数的概念回调函数是程序中常用的函数调用方法。 特征在于,可以通过下级软件模块(宏上的调用方),上级软件模块(宏上的调用方)调用函数,与通常的调用顺序相反。

程序调用方式软件模块的关系,从整体上看,有上层软件模块和下层软件模块之分。

一般来说,有三种调用方法。 双向调用异步调用通常基于消息或事件的机制带回调的调用方法(如MFC )是一种通过简单同步调用的升降直接返回带回调的调用的双向调用模式。 使用此方法时,在调用下级模块的函数时,将调用上级模块的函数。 回调上层模块中的函数至少有两个作用。 一个是监视下级模块函数的执行状态,另一个是介入下级模块函数的执行。

在c语言中,回调函数的基础是函数类型的指针。

回调函数的作用回调函数的作用:回调函数的表示形式是一种函数指针,该函数由上层软件模块实现,通过某种方式将该函数指针传递给下层软件模块,由下层软件模块

函数指针的本质是函数地址,在32比特的系统中,本质是32比特的无符号整数。

函数指针从上层模块传递到下层模块的方式可以是通过函数的参数传递,也可以是使用结构的成员传递。

回调函数的调用时间调用回调函数的时间一般有两种。

一种是在上级模块调用下级模块的函数中,直接调用回调函数。 另一个是使用注册方式,在发生某个事件时下级模块调用回调函数。 回调函数语法:1.简单的函数类型是无参数、无返回值的函数。 简单回调函数的格式是这样的。 类型的定义如下。

typedefvoid(t_simple_callback ) ) void; 注意:回调函数可以是任何类型的函数指针,简单地说,它没有参数,并且不返回值得函数的指针

2 .完整回调函数完整回调函数可以按如下方式实现: 它包含两个无符号整数参数,返回值也是无符号整数。 类型的定义如下。

typedefunsignedint (* t _ full _ callback ) unsigned int para1、unsigned int para2; 具体情况如下。

//形参是普通变量voidfun(intx ) }//形参是函数指针变量voidfun(intx ) p ) int a ) )函数指针变量的常见用途之一。 将指针作为参数传递给其他函数,而指向函数的指针也可以作为参数实现函数地址的传递。

注1 .典型的回调函数包含两个整数类型参数和整数返回值。 第一个参数在下层定义,第二个参数在上层定义,返回值从上层反馈到下层

2 .实际上,这个回调机制常用于由一个系统的不同级别的软件协同处理。 例如,下级模块具有以下功能:上层将回调函数的指针传递给下层,在接口中发生“事件”时调用回调函数,以呈现上层软件模块执行定制操作的接口

代码示例:模拟计算机# include stdio.h # include stdlib.h # include string.hint plus (inta,int b ) {return a b; (int b ) int b,int b ) ) {return a - b; }intmul(inta,int b ) {return a * b; }intdivision(inta,int b ) ) {return a/b; (//函数指针作为函数参数---回调函数voidcalculator(int ) mycalculate ) int,int a,int b ) intret=mycalculate ) a,b ); //dowork中用户选择的内容不确定,之后指定运算规则printf(ret=%dn )、ret )。 }请输入}void test01 () {printf ) '操作符(n ); printf(1,(n ); 打印(2,- n ); printf(3,*(n ); printf(4,/(n ); int select=-1; scanf('%d ',select ); int num1=0; printf ('请输入第一个操作数。 n ); scanf('%d ',num1); int num2=0; printf ('请输入第二个操作数。 n ); scanf('%d ',num2); sitch(select ) case 1:计算器(plus,num1,num2); 黑; case2:calculator(sub,num1,num2); 黑; case 3:计算器(mul,num1,num2); 黑; case 4:计算器(division,num1,num2); 黑; default:break; }}int main () (while ) )1) ) {test01 ); }return 0; }执行结果如下

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。