/*******************************************
* this file is to test function pointer
*
*******************************************/
#include <stdio.h>
typedef int(*FP_CALL)(int,int); //Defines a function pointer type
int (*data_return)(int); // Defines a function pointer of global type
int DataReturn(int a)
{
return a;
}
int AddCaculate(int a,int b)
{
return (a + b);
}
FP_CALL CallFunction(char op)
{
switch(op)
{
case '+' :
printf("found the function AddCaculate \n");
return AddCaculate;
break;
default :
printf("the input error\n");
}
}
int (* FunctionFound(char op))(int ,int) // this is a function whose return data is a function pointer;
{
return CallFunction(op);
}
void main()
{
FP_CALL function_call;
int *p;
int a = 100;
data_return = DataReturn;
p = &a;
function_call = FunctionFound('+');
printf("hello my honey!!!\n");
printf("the function pointer data_return address is : %d \n",data_return);
printf("the function pointer *data_return address is : %d \n",*data_return);
printf("the (*data_return)(2) result is : %d .\n",(*data_return)(2));
printf("the data_return(3) result is : %d .\n",data_return(3));
printf("the int pointer (*p) is : %d \n",*p);
printf("the int pointer p is : %d \n",p);
printf("the function_call run result is :%d \n",function_call(10,12));
/* */
}
//运行结果: 本例子是再windows上建立GCC,利用gcc命令进行编译的;

分析:
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);都可以调用函数指针所指向的函数;