函数指针:指向函数首地址的指针变量
定义函数指针: 用(*标识符)替换函数名,剩下照抄
如 int sum(int a,int b) ---> int (*pr)(int a,int b) //形参可以不写 int (pr*)(int,int)
通过函数指针调用函数
给函数指针赋值,通常使用的是函数名
pr = sum;
1.直接替换函数名调用 pr(1,2);
2.取*运算调用 (*pr)(1,2);
函数指针的作用:充当回调函数(以函数指针为参数的函数)
int max(int a,int b){
return a>b?a:b;
}
int min(int a,int b){
return a>b?b:a;
}
void printdata(int (*p)(int,int),int a,int b){
cout<<p(a,b)<<endl;
}
void (*pp) (int(*)(int,int),int,int) = printdata;
pp(max,1,2);
pp(min,1,2);
typedef和函数指针
typedef基本用法(给类型起别名
typedef int INT;
int a = 1;
INT aa =1;
补充结构体别名
typedef struct Node{
int value;
Node *next;
........
}NODE,*NODE,ARRAY[3];
typedef struct Node NODE;
typedef struct Node *NODE;
typedef struct Node ARRAY[3];
相当于给结构体,结构体指针,结构体数组都起了别名。
万能指针:空类型指针
void *p;
万能指针能操作所有类型指针,但使用前要进行强制类型转换
函数指针的类型
void print(){
cout<<"万能指针调用函数指针"<<endl;
}
void *p = print;
((void(*)())p)();
*((void(*)())p)();
//void print()的函数指针是 void(*pr)();
//去掉变量名,所以函数指针的类型是 void(*)();
// ((void(*)())p)(); 将万能指针强制类型转换成void(*)(),再调用函数
// *((void(*)())p)(); 取星号运算,也是调用函数