一个函数指针的例子--int (* FunctionFound(char op))(int ,int) ;
程序员文章站
2024-01-05 16:26:52
此代码演示函数指针的例子,再windows下,利用gcc命令编译; 运行结果: 分析: 1、typedef int(*FP_CALL)(int,int); //定义一个函数指针类型,并不是一个函数指针; FP_CALL function_call; // 这一句才是定义一个函数指针; 2、 int ......
此代码演示函数指针的例子,再windows下,利用gcc命令编译;
1 /******************************************* 2 * this file is to test function pointer 3 * 4 *******************************************/ 5 #include <stdio.h> 6 7 8 typedef int(*FP_CALL)(int,int); //Defines a function pointer type 9 10 11 int (*data_return)(int); // Defines a function pointer of global type 12 13 int DataReturn(int a) 14 { 15 return a; 16 } 17 18 int AddCaculate(int a,int b) 19 { 20 return (a + b); 21 } 22 23 FP_CALL CallFunction(char op) 24 { 25 switch(op) 26 { 27 case '+' : 28 printf("found the function AddCaculate \n"); 29 return AddCaculate; 30 break; 31 default : 32 printf("the input error\n"); 33 } 34 } 35 36 int (* FunctionFound(char op))(int ,int) // this is a function whose return data is a function pointer; 37 { 38 return CallFunction(op); 39 } 40 41 void main() 42 { 43 FP_CALL function_call; 44 int *p; 45 int a = 100; 46 47 data_return = DataReturn; 48 49 p = &a; 50 51 function_call = FunctionFound('+'); 52 53 printf("hello my honey!!!\n"); 54 printf("the function pointer data_return address is : %d \n",data_return); 55 printf("the function pointer *data_return address is : %d \n",*data_return); 56 57 printf("the (*data_return)(2) result is : %d .\n",(*data_return)(2)); 58 printf("the data_return(3) result is : %d .\n",data_return(3)); 59 60 printf("the int pointer (*p) is : %d \n",*p); 61 printf("the int pointer p is : %d \n",p); 62 63 printf("the function_call run result is :%d \n",function_call(10,12)); 64 65 /* */ 66 67 }
运行结果:
分析:
1、typedef int(*FP_CALL)(int,int); //定义一个函数指针类型,并不是一个函数指针;
FP_CALL function_call; // 这一句才是定义一个函数指针;
2、 int (*data_return)(int); // 这个是直接定义一个函数指针;与1中,只是定义方法不同;
3、FP_CALL CallFunction(char op) //此函数的返回值为一个函数指针;
4、int (* FunctionFound(char op))(int ,int) // 此函数的返回值也是一个函数指针;此函数指针拥有两个int参数,返回值类型为int;
5、data_return 和 *data_return 定义的地址是一样的;也就是说data_return(2);与(*data_return)(2);都可以调用函数指针所指向的函数;