函数指针的就是一个指针,只不过它指向的是一个函数。
函数在内存中占用一组地址,函数名即代表函数的起始地址,也称函数的入口地址,这一点与数组类似。
函数指针变量指向的就是函数的入口地址。
函数指针的基本格式:
返回类型 (* 指针变量名)(参数类型)
int (* ptr)(int int)
int add(int a,int b){
return a+b;
}
ptr=add;
add(2,3);//5
ptr(2,3);//5
函数指针有两点注意:
- 函数指针的返回类型要与所指向函数的函数返回类型相同。
- 函数指针的参数类型要与所指向函数的参数类型相同。
函数指针可以用来做函数的参数,也就是 回调函数。
回调函数就是用函数指针(函数地址)做函数参数的函数。
int add(int a,int b){
return a+b;
}
int mul(int a,int b){
return a*b;
}
int operate(int a, int b, int (* ptr)(int int)){
return ptr(a,b);
}
operate(2,3,add);//5
operate(2,3,mul);//6
回调函数可以直接分离调用者和被调用者,修改函数指针变量的指向达到不同效果。