回调函数用法详细讲解

发布于:2025-04-17 ⋅ 阅读:(23) ⋅ 点赞:(0)

目录

一、通过几个例子,浅谈一下我的学习见解!

二、typedef关键字用法回顾

1)基本语法

2)主要用途

1、为基本数据类型定义别名

2、为复杂类型定义别名

>>1.数组类型

>>2.指针类型

>>3.结构体类型

>>4.函数指针

3)优势

4)综合示例


一、通过几个例子,浅谈一下我的学习见解!

#include "stdio.h"

//定义回调函数的类型
typedef void (*CallbackFunction)(int);

/**
  如果说不定义回调函数的类型,那么区别在于 performOperation 函数要这样写!注意区分!
  void performOperation(int data, void (*callback)(int))
  {
   
  //执行某些操作
  printf("执行操作,数据位: %d\n", data);

  //调用回调函数
  if(callback != NULL)
  {
      callback(data);
   }
  }
*/

//函数接受一个回调函数作为参数
void performOperation(int data, CallbackFunction callback)
{
   //执行某些操作
   printf("执行操作,数据位: %d\n", data);

   //调用回调函数
   if(callback != NULL)
   {
      callback(data);
   }
}

//回调函数示例
void displayData(int data)
{
   printf("回调函数被调用,数据显示:%d\n", data);
}

int main(void)
{
   int data = 42;

   //调用函数,并传递回调函数
   performOperation(data, displayData);

   return 0;
}

可以看下这个图,一样的道理,可能比较直观!

1、写回调函数;

2、main方法中调用被赋值的函数,并传入回调函数的函数名(传入);

3、函数中的变量名被赋值替换,回调函数被调用!

二、typedef关键字用法回顾

       typedef关键字在C语言中,主要用途是为现有的数据类型定义一个新的名字别名),可以提高代码的可读性和可维护性。

1)基本语法

typedef 原类型名 新类型名;

原类型名是已存在的类型,可以是基本数据类型、结构体、联合体、枚举、指针等。新类型名是你为这个类型定义的新名称。

2)主要用途

1、为基本数据类型定义别名
typedef int Integer;

之后可以使用Interger代替Int来声明变量!

Integer a = 10;
2、为复杂类型定义别名
>>1.数组类型
typedef int Array[10];

Array代表一个包含10个整数的数组类型:

Array myArray;
>>2.指针类型
typedef char* String;

string表示一个指向字符的指针:

String str = "Hello";
>>3.结构体类型
typedef struct
{
   int x;
   int y;
}Point;

现在可以使用Point来声明结构体变量:

Point p;
p.x = 10;
p.y = 20;
>>4.函数指针
typedef int (*Callback)(int, int);

Int表示函数的返回类型是int, Callback代表一个指向函数的指针。

这句代码的意思是“定义一个新的类型名Callback,它代表一个指向函数的指针,该函数接受两个int参数并返回一个int类型值。”

Callback myFunction;

3)优势

1、提高代码可读性:可以使代码更易于理解。

2、简化代码:特别是对于复杂的类型,使用typedef可以简化类型声明,减少错误。

3、增强可移植性:跨平台开发中,可以使用typedef来定义与平台相关的额类型,从而提高代码的可移植性。

4、模块化设计:更易于维护和修改!

4)综合示例

#include "stdio.h"

// 为基本数据类型定义别名
typedef int MyInt;

// 为结构体定义别名
typedef struct
{
   MyInt x;
   MyInt y;
}MyPoint;

// 为函数指针定义别名
typedef MyInt (*MyCallback)(MyInt, MyInt);

// 回调函数示例
MyInt add(MyInt a, MyInt b)
{
   return a+b;
}

int main(void)
{
   //使用别名声明变量
   MyInt num = 10;
   MyPoint p;
   p.x = 5;
   p.y = 10;

   //使用函数指针别名
   MyCallback callback = add;
   MyInt result = callback(num, p.x);

   printf("Result: %d\n", result); // 输出:Result: 15

   return 0;
}


网站公告

今日签到

点亮在社区的每一天
去签到