C语言函数指针与函数变量
转载请注明出处:http://www.cnblogs.com/idalink/p/4420816.html
传统数据类型,无论是基本数据类型变量还是构造数据类型、引用数据类型变量,都逃过不 [变量类型 变量名]这种定义方式。但是有个类型变量就很奇特, 那就是函数指针类型定义。因为函数结构复杂,怎么才能抽离这这一量呢?
函数类型定义,定义一个FUNCTION函数类型:
typedef int (*Function)(int, int);
毫无疑问,这是标准写法,后面有几个参数就写几个参数,如果没有参数就写0个参数,或则写上void关键字。比如:
typedef void (*Function)([void]); //灰色方框表示可选
既然有了函数指针类型,定义变量也就轻而易举:
Function function = existedFunction;
当然,不经过typdef关键字也能快速定义变量:
int (*function)(int, int) = existedFunction;
得到函数指针变量就可以通过指针调用函数,格式为:
int result = (*function)(a, b);
一个完整的demo如下:
#include <iostream> using namespace std; void sayHello(void) { cout<<"\nHello\n"; } int add(int a, int b) { return a + b; } typedef int (*Add_Function)(int, int); typedef void (*MySayHello_Void)(void); typedef void (*MySayHello)(); int main() { int (*myFunction)(int, int) = add; Add_Function myFunctionFromType = add; int result1 = myFunction(100, 202); int result2 = (*myFunction)(100, 202); int result3 = myFunctionFromType(100, 202); int result4 = (*myFunctionFromType)(100, 202); int result5 = (**myFunctionFromType)(100, 202); cout<<"\nCaculateResult1---> "<<result1<<"\n"; cout<<"\nCaculateResult2---> "<<result2<<"\n"; cout<<"\nCaculateResult3---> "<<result3<<"\n"; cout<<"\nCaculateResult4---> "<<result4<<"\n"; cout<<"\nCaculateResult5---> "<<result5<<"\n"; MySayHello_Void sayHelloFunVoid = sayHello; sayHelloFunVoid(); MySayHello sayHelloFun = sayHello; sayHelloFun(); return 0; }
运行结构为:
liuyudeiMac:Study_GDB liuyu$ g++ test_function_gdb.cpp -o test liuyudeiMac:Study_GDB liuyu$ ./test CaculateResult1---> 302 CaculateResult2---> 302 CaculateResult3---> 302 CaculateResult4---> 302 CaculateResult5---> 302 Hello Hello