您的位置:首页 > 其它

typedef 函数指针的用法

2013-11-29 09:42 176 查看
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;

}

//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, '-'));

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: