函数指针
指向函数的指针 和普通指针相同,指向的空间必须和指针类型相同
当函数指针作为一个函数的参数时,就像数组作为参数一样,(int* arr)传入的是arr.
函数的类型:返回类型+形参列表
int add(int x,int y)
{
return x+y;
}
typedef int (*pfun)(int, int);
int mian()
{
int (*pfun)(int,int);//代表申请了一个指针 但是这个pfun指针还未指向
int (*pfun)(int, int) = add;//add地址给pfun
}
应用场景
把指针函数当作形参传递给某些具有一定通用功能的模块。并封装成接口来提高代码的灵活性和后期维护的便捷
比如在qsort中的比较函数int (*compar)(const void *, const void *)
可以直接写一个比较函数,在调用函数时直接把比较函数的地址传入compar
使用tpyedef
typedef int (*pfun)(int, int);//定义了同函数类型的定义方式 使可以用pfun来定义这种函数类型
int fun(int a, int b)
{
return 1;
}
pfun a;//定义了一个int (*a)(int,int)函数指针,但是还未传入函数地址
a=fun;//传入了fun这个函数的地址
(*a)(1,2);//使用fun函数
//当函数的返回地址为函数地址时
int (*gfun(int(*p)(int,int)))(int, int)
{
//这是gfun函数 gfun()的参数为函数指针int(*p)(int,int) 返回值为int(*)(int,int)
//注意int(*)(int,int)的变量在(*)处,所以返回值应该在此处,所以应该int(*gfun())(int,int)
}