小兔网

一、函数指针

函数存放在内存的代码区域内,它们同样有地址.如果我们有一个 int test(int a) 的函数,那么,它的地址就是函数的名字,这一点如同数组一样,数组的名字就是数组的起始地址。

1、函数指针的定义方式

data_types (*func_pointer)( data_types arg1, data_types arg2, ...,data_types argn);

例如:

int (*fp)(int a); // 这里就定义了一个指向函数(这个函数参数仅仅为一个 int 类型,函数返回值是 int 类型)的指针 fp。

实例

int test(int a){ return a;}int main(int argc, const char * argv[]){ int (*fp)(int a); fp = test; cout<<fp(2)<<endl; return 0;}

注意:函数指针所指向的函数一定要保持函数的返回值类型,函数参数个数,类型一致。

2、typedef 定义可以简化函数指针的定义

实例

int test(int a){ return a;} int main(int argc, const char * argv[]){ typedef int (*fp)(int a); fp f = test; cout<<f(2)<<endl; return 0;}

3、 函数指针同样是可以作为参数传递给函数的

实例

int test(int a){ return a-1;}int test2(int (*fun)(int),int b){ int c = fun(10)+b; return c;} int main(int argc, const char * argv[]){ typedef int (*fp)(int a); fp f = test; cout<<test2(f, 1)<<endl; // 调用 test2 的时候,把test函数的地址作为参数传递给了 test2 return 0;}