C代码  
//#include<iostream.h>  
#include<stdio.h>  
  
typedef int (*FP_CALC)(int, int);  
//注意这里不是函数声明而是函数定义,它是一个地址,你可以直接输出add看看  
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, '/'));  
}   --------------------- 本文来自 蜗牛凯 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/arvin_kai/article/details/39555529?utm_source=copy

typedef 函数指针的使用(含例子)的更多相关文章

  1. C 中typedef 函数指针的使用

    类型定义的语法可以归结为一句话:只要在变量定义前面加上typedef,就成了类型定义.这儿的原本应该是变量的东西,就成为了类型. int integer;     //整型变量int *pointer ...

  2. C中typedef 函数指针的使用

    类型定义的语法可以归结为一句话:只要在变量定义前面加上typedef,就成了类型定义.这儿的原本应该是变量的东西,就成为了类型. int integer;     //整型变量int *pointer ...

  3. (转)typedef 函数指针的用法

    typedef 函数指针的用法   在网上搜索函数指针,看到一个例子.开始没看懂,想放弃,可是转念一想,这个用法迟早要弄懂的,现在多花点时间看懂它,好过以后碰到了要再花一倍时间来弄懂它.其实很多时候都 ...

  4. typedef 函数指针的用法

    转自:http://www.cnblogs.com/shenlian/archive/2011/05/21/2053149.html typedef 函数指针的用法 在网上搜索函数指针,看到一个例子. ...

  5. typedef 函数指针 数组 std::function

    1.整型指针 typedef int* PINT;或typedef int *PINT; 2.结构体 typedef struct { double data;}DATA,  *PDATA;  //D ...

  6. typedef函数指针那些事

    首先来介绍下函数指针: 函数指针是指向函数的指针变量,即本质是一个指针变量. int (*f) (int x); /* 声明一个函数指针 */ f=func; /* 将func函数的首地址赋给指针f ...

  7. C++------------typedef 函数指针类型定义

    摘要bycrazyhacking:        typedef 是定义了一种"函数指针"类型,可以再声明很多变量.函数指针的定义是定义了一个变量. int max(int x,i ...

  8. typedef void (*Fun) (void) 的理解——函数指针——typedef函数指针

    首先介绍大家比较熟悉的typedef int i;//定义一个整型变量i typedef myInt int: myInt j;//定义一个整型变量j 上面介绍得是我们常用的比较简单的typedef的 ...

  9. IOS typedef 函数指针的用法

    代码简化, 促进跨平台开发的目的. typedef 行为有点像 #define 宏,用其实际类型替代同义字. 不同点:typedef 在编译时被解释,因此让编译器来应付超越预处理器能力的文本替换. 用 ...

随机推荐

  1. 刷题or源码链接

    Hadoop权威指南的Github https://github.com/tomwhite/hadoop-book hadoopAPI http://hadoop.apache.org/docs/cu ...

  2. join()、split()

    join()用于把数组转化为字符串 var arr=['hello','world','kugou']; document.write(arr.join(''));//helloworldkugou ...

  3. js百度地图API创建弧线并修改弧线的弧度

    去百度API官网下载CurveLine.min.js,注意复制下来的Js前面的行号要删除. // 百度地图API功能 var map = new BMap.Map("container&qu ...

  4. js image转canvas不显示

    今天在项目开发中遇到了image转canvas不显示的问题,最后翻了不少资料才发现问题出现在图片加载上 如果你的代码是这样的,那么不显示的原因就是img没有加载完成 function convertI ...

  5. boost algorithm

    BOost Algorithm provides algorithms that complement the algorithms from the standard library. Unlike ...

  6. webpack对脚本和样式的处理

    一.对js处理 webpack本身支持js加载也可以用插件. 1.加载要全局使用的插件比如jquery 在页面用cdn方式引用,然后再webpack.config.js里配置.会让jquery成为全局 ...

  7. 安装windows10和fedora23双系统的一些注意事项

    在安装双系统windows10和fedora的过程中遇到了很多的问题,博主也是在慢慢的摸索中最后莫名其妙的成功的安装双系统. 当然,幸亏博主机智的记住了中间的一些细节,所以大致上的有一些注意事项希望能 ...

  8. 牛客多校训练营第九场 J - Symmetrical Painting (排序)

    J - Symmetrical Painting 题意 给你\(n\)个矩形, 左下角\((i-1,\ L_i)\), 右上角\((i,\ R_i)\), 找一条线\(l\)平行于\(x\)轴, 让这 ...

  9. 9.26-mkdir,tree,touch命令

    mkdir -- 创建文件 [root@wen data]# mkdir --help 用法:mkdir [选项]... 目录... 若指定目录不存在则创建目录. 长选项必须使用的参数对于短选项时也是 ...

  10. paper 160:python 知识点概要 更新ing

    1.python json  http://www.runoob.com/python/python-json.html Python的json模块提供了一种很简单的方式来编码和解码JSON数据. 其 ...