typedef 函数指针的用法

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, '-'));
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值