回调函数20251125

1.回调函数:

  • 将函数作为指针传参给其他函数使用,实现解耦作用,将各个功能分开。
    Pasted image 20251125221724
  • 举例,不含参数的回调函数:
#include"stdio.h" 
int Callback()   
{  
    printf("Hello, this is Callback ");  
    return 0;  
}
int Handle(int (*callback)())
{
	printf("Entering Handle Function. ");  
    Callback();  
    printf("Leaving Handle Function. ");
}
int main()  
{  
    printf("Entering Main Function. ");  
    Handle(Callback);   
    printf("Leaving Main Function. ");  
    return 0;  
}
  • 有参数的回调函数
#include"stdio.h" 
int Callback(int x)   
{  
    printf("Hello, this is Callback,this param is %d",x);  
    return 0;  
}
//callback是指针名,可以随便起,如*p
int Handle(int y,int *(callback)(int))
{
    printf("Entering Handle Function. ");  
    callback(y);  
    printf("Leaving Handle Function. ");
}
int main()  
{  
    printf("Entering Main Function. ");  
    Handle(10,Callback);   
    printf("Leaving Main Function. ");  
    return 0;  
}
// 定义一个函数指针类型:FuncPtr(指向“接收int、返回int”的函数)
typedef int (*FuncPtr)(int);

// 用类型别名改写Handle函数的参数
int Handle(int y, FuncPtr callback) {  // 等价于 int Handle(int y, int (*callback)(int))
    printf("Entering Handle Function. ");  
    callback(y);  // 直接用类型别名调用,更清晰
    printf("Leaving Handle Function. ");
}
  • 函数指针的核心是「指针指向的函数必须有固定的参数列表返回值类型」,声明语法的通用格式是:返回值类型 (*指针变量名)(参数类型列表);
    • 括号 (*指针变量名) 是关键:强制让 * 先与变量名结合,表明这是一个「指针」,而不是返回值为指针的函数。
  • 后面的 (参数类型列表) 表明:这个指针只能指向「参数类型匹配」的函数
  • 最前面的 返回值类型 表明:这个指针只能指向「返回值类型匹配」的函数
posted @ 2025-11-25 22:38  小智001  阅读(7)  评论(0)    收藏  举报