认识函数指针
一. 函数指针
举例
void func() {
printf("这是func函数\n");
}
void(* func_ptr)() = func;
func_ptr(); //通过函数指针调用func()
(*func_ptr)();//对函数指针进行解引用,然后调用
分析:
- void(*)() 是函数指针类型 而
one_f是该类型的变量 - 在 C/C++ 标准中,函数指针的解引用操作被定义为与直接调用函数指针等价
- 从这个角度来看,函数指针似乎只是为函数换了一个名字,但是它主要的作用是用于传递参数,作为回调函数(见下文)
void (* signal (int, void(*)(int)) )(int);
-
signal 后面紧跟一个()表明signal是一个函数名
-
然后是()里面有两个参数
-
一个是int型
-
一个是函数指针
该函数指针,指向一个参数为int,返回类型是void的函数
-
-
对于剩下部分为 void (* )(int) 这是signal的返回类型
-
是一个signal函数的声明
-
它的另一种写法:
-
//对void(*)(int)的函数指针类型重命名为pfun_t typedef void(*pfun_t)(int); pfun_t signal(int, pfun_t);
二. 函数指针数组
// 定义函数
int add(int a, int b) { return a + b; }
int sub(int a, int b) { return a - b; }
int mul(int a, int b) { return a * b; }
int main() {
// 定义并初始化函数指针数组
int (*func_array[3])(int, int) = {add, sub, mul};
int result1 = func_array[0](3, 4); // 调用 add
}
分析:fun_array是一个大小为3的数组,数组中元素类型为int (*)(int, int)
三. 回调函数
typedef void(*pfun_t)(int);
void handler(int sig) { //自定义信号处理函数
// 处理信号
}
pfun_t signal(int sig, pfun_t callBack) {
pfun_t old = ...;//获取原先的回调函数
callBack(sig); //调用新的回调函数
return old;
}
int main() {
void (*old_handler)(int) = signal(SIGINT, handler);
}
分析:对于函数指针类型pfun_t在作为函数参数进行使用
四.qsort()
该库函数在头文件<stdlib.h>中,用的是快速排序
函数声明:

使用示例:

🦀🦀观看~
1332

被折叠的 条评论
为什么被折叠?



