typedef int (*MYFUN)(int, int);
上面的例子定义MYFUN 是一个函数指针,函数类型是带两个int 参数,返回一个int
在分析这种形式的定义的时候可以用下面的方法:
先去掉typedef 和别名,剩下的就是原变量的类型.
去掉typedef和MYFUN以后就剩:
int (*)(int, int)
下面的三个例子都是在vc6上编译通过。
例1:
#include <stdio.h>
char (*pFun)(int);
char glFun(int a)
{
printf("%d\n",a);
return 0;
}
void main()
{
pFun = glFun;
(*pFun)(2);
}
例2
#include <stdio.h>
typedef char (*PTRFUN)(int);
PTRFUN pFun;
char glFun(int a)
{
printf("%d\n",a);
return 0;
}
void main()
{
pFun = glFun;
(*pFun)(2);
}
例3:
#include <stdio.h>
typedef int (*FP_CALC)(int, int);
int add(int a, int b)
{
return a + b;
}
int sub(int a, int b)
{
return a - b;
}
FP_CALC calc_func(char op)
{
switch (op)
{
case '+': return add;
case '-': return sub;
default: return NULL;
}
return NULL;
//返回值为一个拥有两个int参数、返回类型为int的函数指针
int (*s_calc_func(char op)) (int, int)
{
return calc_func(op);
}
int calc(int a, int b, char op)
{
FP_CALC fp = calc_func(op); //根据预算符得到各种运算的函数的地址
//int (*fp)(int, int) = s_calc_func(op);//用于测试,等价于上一行
if (fp)
return fp(a, b); //根据上一步得到的函数的地址调用相应函数,并返回结果
else
return -1;
}
void main()
{
int a = 100, b = 20;
printf("calc(%d, %d, %c) = %d\n", a, b, '+', calc(a, b, '+'));
printf("calc(%d, %d, %c) = %d\n", a, b, '-', calc(a, b, '-'));
}
上面的例子定义MYFUN 是一个函数指针,函数类型是带两个int 参数,返回一个int
在分析这种形式的定义的时候可以用下面的方法:
先去掉typedef 和别名,剩下的就是原变量的类型.
去掉typedef和MYFUN以后就剩:
int (*)(int, int)
下面的三个例子都是在vc6上编译通过。
例1:
#include <stdio.h>
char (*pFun)(int);
char glFun(int a)
{
printf("%d\n",a);
return 0;
}
void main()
{
pFun = glFun;
(*pFun)(2);
}
例2
#include <stdio.h>
typedef char (*PTRFUN)(int);
PTRFUN pFun;
char glFun(int a)
{
printf("%d\n",a);
return 0;
}
void main()
{
pFun = glFun;
(*pFun)(2);
}
例3:
#include <stdio.h>
typedef int (*FP_CALC)(int, int);
int add(int a, int b)
{
return a + b;
}
int sub(int a, int b)
{
return a - b;
}
FP_CALC calc_func(char op)
{
switch (op)
{
case '+': return add;
case '-': return sub;
default: return NULL;
}
return NULL;
}
//s_calc_func为函数,它的参数是 op,//返回值为一个拥有两个int参数、返回类型为int的函数指针
int (*s_calc_func(char op)) (int, int)
{
return calc_func(op);
}
int calc(int a, int b, char op)
{
FP_CALC fp = calc_func(op); //根据预算符得到各种运算的函数的地址
//int (*fp)(int, int) = s_calc_func(op);//用于测试,等价于上一行
if (fp)
return fp(a, b); //根据上一步得到的函数的地址调用相应函数,并返回结果
else
return -1;
}
void main()
{
int a = 100, b = 20;
printf("calc(%d, %d, %c) = %d\n", a, b, '+', calc(a, b, '+'));
printf("calc(%d, %d, %c) = %d\n", a, b, '-', calc(a, b, '-'));
}