typedef 函数指针

#include <stdio.h>

typedef char (*PTRFUN)(int);  //typedef 定义一个新类型  类型为指针  
                         //该指针指向一个函数 该函数一个int参数  返回值未char
PTRFUN pFun;       //新类型PTRFUN  该类型声明了一个pFun变量         

char glFun(int a)
{
    printf("%d\n",a);
}

int main()
{
    pFun = glFun;   //把glFun函数赋值给  pFun变量
    (*pFun) (2);
}

#include <stdio.h>
#include <assert.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;
}
 
int mul(int a, int b)
{
    return a * b;
}
 
int div(int a, int b)
{
    return b ? a/b : -1;
}
 
//定义一个函数,参数为op,返回一个指针,该指针类型为拥有两个int参数、
//返回类型为int的函数指针。它的作用是根据操作符返回相应函数的地址
FP_CALC calc_func(char op)
{
    switch( op )
    {
    case '+':
        return add;
    case '-':
        return sub;
    case '*':
        return mul;
    case '/':
        return div;
    default:
        return NULL;
    }
    return NULL;
}
 
//s_calc_func为函数,它的参数是 op,   
//返回值为一个拥有两个int参数、返回类型为int的函数指针  
int (*s_calc_func(char op)) (int , int)
{
    return calc_func(op);
}
 
//最终用户直接调用的函数,该函数接收两个int整数,
//和一个算术运算符,返回两数的运算结果
int calc(int a, int b, char op)
{
    FP_CALC fp = calc_func(op);
    int (*s_fp)(int,int) = s_calc_func(op);//用于测试
 
    assert(fp == s_fp);// 可以断言这两个是相等的
 
    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, '-'));   
    printf("calc(%d, %d, %c) = %d\n", a, b, '*', calc(a, b, '*'));   
    printf("calc(%d, %d, %c) = %d\n", a, b, '/', calc(a, b, '/')); 
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值