此代码演示函数指针的例子,再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 errorn");
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);都可以调用函数指针所指向的函数;
内容来源于网络如有侵权请私信删除
你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!

相关课程