typedef 函数指针的用法

Calibre 3Dstack --每日一个命令day27【overlap】(3-27) 本文介绍了Calibre3Dstack中overlap命令的使用方法。该命令用于检查两个已放置层之间的重叠量是否符合要求,支持设置检查名称、层类型、堆叠范围、检查方向等参数。关键参数包括:-constraint指定重叠约束条件,-exact控制百分比精度,-by_area切换为面积检查模式,-intersection报告相交区域。检查结果可通过RVE选项定制显示方式,适用于3D堆叠设计中的层间重叠验证场景。 阅读详情

在网上搜索函数指针,看到一个例子。开始没看懂,想放弃,可是转念一想,这个用法迟早要弄懂的,现在多花点时间看懂它,好过以后碰到了要再花一倍时间来弄懂它。其实很多时候都是这样,如果每次到难一点的内容,总想着下次我再来解决它,那就永远也学不到东西。

后面那个例子加了注释,是我对这种用法的理解,希望对新手有所帮助。

进入正文:

 代码简化, 促进跨平台开发的目的.

 typedef 行为有点像 #define 宏,用其实际类型替代同义字。

 不同点:typedef 在编译时被解释,因此让编译器来应付超越预处理器能力的文本替换。

用法一:

typedef int (*MYFUN)(int, int); 
这种用法一般用在给函数定义别名的时候
上面的例子定义MYFUN 是一个函数指针, 函数类型是带两个int 参数, 返回一个int 

在分析这种形式的定义的时候可以用下面的方法: 
先去掉typedef 和别名, 剩下的就是原变量的类型. 
去掉typedef和MYFUN以后就剩: 
int (*)(int, int)

用法二:

typedef给变量类型定义一个别名.

typedef struct{ 
int a; 
int b; 
}MY_TYPE; 

这里把一个未命名结构直接取了一个叫MY_TYPE的别名, 这样如果你想定义结构的实例的时候就可以这样: 
MY_TYPE tmp;

第二种用法:typedef 原变量类型 别名

简单的函数指针的用法

//形式1:返回类型(*函数名)(参数表)

char(*pFun)(int);

//typedef char(*pFun)(int)   //跟上一行功能等同

/*typedef的功能是定义新的类型。第一句就是定义了一种PTRFUN的类型,并定义这种类型为指向某种函数的指针,这种函数以一个int为参数并返回char类型。*/

char glFun(int a){return;}

void main()

{

pFun =glFun;

(*pFun)(2);

}

第一行定义了一个指针变量pFun.它是一个指向某种函数的指针,这种函数参数是一个int类型,返回值是char类型。只有第一句我们还无法使用这个指针,因为我们还未对它进行赋值。

第二行定义了一个函数glFun().该函数正好是一个以int为参数返回char的函数。我们要从指针的层次上理解函数-函数的函数名实际上就是一个指针,函数名指向该函数的代码在内存中的首地址。

下面是一个例子:

C代码 
  1. //#include<iostream.h>   
  2. #include<stdio.h>   
  3.   
  4. typedef int (*FP_CALC)(int, int);   
  5. //注意这里不是函数声明而是函数定义,它是一个地址,你可以直接输出add看看   
  6. int add(int a, int b)   
  7. {   
  8.      return a + b;   
  9. }   
  10. int sub(int a, int b)   
  11. {   
  12.      return a - b;   
  13. }   
  14. int mul(int a, int b)   
  15. {   
  16.      return a * b;   
  17. }   
  18. int div(int a, int b)   
  19. {   
  20.      return b? a/b : -1;   
  21. }   
  22. //定义一个函数,参数为op,返回一个指针。该指针类型为 拥有两个int参数、   
  23. //返回类型为int 的函数指针。它的作用是根据操作符返回相应函数的地址   
  24. FP_CALC calc_func(char op)   
  25. {   
  26.      switch (op)   
  27.       {   
  28.      case '+': return add;//返回函数的地址   
  29.      case '-': return sub;   
  30.      case '*': return mul;   
  31.      case '/': return div;   
  32.      default:   
  33.          return NULL;   
  34.       }   
  35.      return NULL;   
  36. }   
  37. //s_calc_func为函数,它的参数是 op,   
  38. //返回值为一个拥有 两个int参数、返回类型为int 的函数指针   
  39. int (*s_calc_func(char op)) (int, int)   
  40. {   
  41.      return calc_func(op);   
  42. }   
  43. //最终用户直接调用的函数,该函数接收两个int整数,和一个算术运算符,返回两数的运算结果   
  44. int calc(int a, int b, char op)   
  45. {   
  46.       FP_CALC fp = calc_func(op); //根据预算符得到各种运算的函数的地址   
  47.          int (*s_fp)(int, int) = s_calc_func(op);//用于测试   
  48.          // ASSERT(fp == s_fp);    // 可以断言这俩是相等的   
  49.      if (fp) return fp(a, b);//根据上一步得到的函数的地址调用相应函数,并返回结果   
  50.      else return -1;   
  51. }   
  52.   
  53. void main()   
  54. {      
  55.     int a = 100, b = 20;   
  56.   
  57.       printf("calc(%d, %d, %c) = %d\n", a, b, '+', calc(a, b, '+'));   
  58.       printf("calc(%d, %d, %c) = %d\n", a, b, '-', calc(a, b, '-'));   
  59.       printf("calc(%d, %d, %c) = %d\n", a, b, '*', calc(a, b, '*'));   
  60.       printf("calc(%d, %d, %c) = %d\n", a, b, '/', calc(a, b, '/'));   
  61. }  

运行结果

   calc(100, 20, +) = 120

   calc(100, 20, -) = 80

   calc(100, 20, *) = 2000

   calc(100, 20, /) = 5

maya导入导出bvh 自动 脚本 maya打开bvh脚本 阅读详情

相关推荐

大模型-高通qnn基础

提供较低级别、高度可定制的统一API,通过单独的库加速所有AI加速器核心上的AI模型, 可以直接用于针对特定的加速器核心或从流行的运行时(包括Qualcomm Neural Processing SDK、TensorFlow Lite和ONNX运行时)委派工作负载。一个支持异构计算、系统级配置的一体化SDK,旨在将AI工作负载引导到我们平台上的所有加速器核心。为开发人员提供灵活性,包括核心间协作支持和其他高级功能。是一个为训练好的神经网络模型提供高级量化和压缩技术的库。

点滴的岁月 4083

关于typedef的用法总结

学校的C语言教科书中对typedef只有一带而过的简介,所以在学习数据结构的时候屡次碰壁。在网上找到一篇关于typedef用法的总结,现转载如下。由于作者未贴出原作者的链接,所以我这只能贴出二次编辑后的地址。——我是传送门以下为转载内容:在C还是C++代码中,typedef都使用的很多,在C代码中尤其是多。typedef与#define有些相似,其实是不同的,特别是在一些复杂的用法上,看了网上一些C

ImAoJin的博客 868

Matlab实战:从零搭建弹道导弹六自由度仿真模型(附完整代码)

本文详细介绍了如何使用Matlab从零搭建弹道导弹六自由度仿真模型,涵盖仿真环境配置、核心运动方程实现、气动力建模及仿真结果分析。通过完整代码示例,帮助读者掌握弹道导弹六自由度仿真的关键技术,适用于航空航天工程和复杂系统建模领域。

x8y9z0的博客 946

typedef 详解

typedef,看名称,就是类型定义,它,真的就用在类型定义。 它创建一种新的数据类型名称。 注意,是数据类型名称,不是数据类型。 也就是说,typedef并不创建新的类型,typedef只是在已有数据类型(比如 int,char等)上,给这个已有类型起一个别名。 typedef 应用场景: 1. 变量: typedef int Length; // 给int数据类型...

1836

告别交越失真:手把手教你设计高性能互补输出级电路(LTspice实测)

本文深入剖析音频放大器中常见的交越失真问题,并提供基于LTspice仿真的实战解决方案。通过对比二极管偏置、Vbe倍增器和集成运放驱动三种经典方案,手把手指导设计高性能互补输出级电路,涵盖原理分析、仿真验证及实物调试要点,助力消除音频失真,提升音质。

weixin_29190573的博客 552

SAP 公司间库存调拨通过IDOC完成自动发票校验

本文仅用于SAP软件的应用与学习,不代表SAP公司。(注:文中所示截图来源SAP ERP软件,软件相应著作权归SAP所有。公司间采购时,通过SAP内部EDI 数据传输功能, 由销售方开的公司间发票自动触发采购方的发票校验。​欢迎扫码加如下微信,我会把大家拉到SAP PP学习群,随时欢迎跟我和其他SAP PP顾问一起交流和学习,如下图库存调拨订单,系统已经完成了发货方发货和收货方收货。

2402_84262664的博客 923

typedef struct的时候,为什么可以有两个名称,两个名称的区别?

代码如下 typedef struct tagXX { }XX; 上面的,为什么不直接 struct XX { }; 呢,或者把tagXX去掉。 tagXX是结构体的【本名】,XX是【别名】,无论本名和别名都不是必要的,你甚至可以两个都不要。 传统C语言中,定义结构体的标准语法是: struct tagXX{}; tagXX是这个结构体的【本

bxlsky的专栏 1万+

光流法实战:如何用OpenCV的Farneback算法实现图像对齐(附调参技巧)

本文详细介绍了如何使用OpenCV的Farneback稠密光流算法实现图像对齐,包括核心原理、参数调优和工程实现。通过实战代码和参数优化策略,帮助开发者解决动态场景中的图像对齐问题,提升多帧融合和视频处理的效果。

weixin_29266007的博客 290

数据结构中栈树之类的结构体为什么要命名为两个名字

数据结构中栈树之类的结构体为什么要命名为两个名字

鲨鱼亲吻小鹿的博客 1497

ERA5 hourly data批量下载与cdo处理(一)

本篇文章主要介绍了ERA数据的批量下载

qq_40511689的博客 3871

车载以太网网络测试-27【SOME/IP-SD简述】

SOME/IP-SD协议是基于IP的可扩展面向服务中间件中的服务发现协议,是汽车电子和嵌入式系统中实现动态服务发现与通信的核心组件。该协议规范详细说明了协议SOME/IP服务发现(SOME/IP-SD)的格式、消息序列和语义。本文将对SOME/IP-SD协议进行详细介绍。

车载网络测试工程师的博客 1953

typedef用法,函数指针

函数指针的声明 函数指针的声明 int (*a)(int,int)=NULL; typedef重定义 typedef int (*PF)(int,int);//函数指针别名 PF a=NULL; typedef int (*PFS[4])(int,int);//函数指针别名 PFS b={NULL};//定义了一个函数指针数组,4个长度 用函数指针作为函数的返回值 指针函数的定义 顾名思义,指针函数即返回指针的函数。其一般定义形式如下: 类型名 *函数名(函数参数表列); 其中,后缀运算符

qq_43446733的博客 4073

『OPEN3D』1.2 mesh处理 python篇

介绍open3d对mesh的基本处理操作

NNNNNathan的博客 4648

新手也能懂!typedef 的三个用法与函数指针入门指南

当需要定义多个同类型数组或指针时,typedef 能避免重复书写复杂类型声明。// 定义指向int的指针数组(传统方式)// 复杂声明难以理解// 使用typedef简化// 定义函数指针类型// 清晰明了// 定义固定长度数组类型// 定义8位无符号数组类型// 直接使用,等价于uint8_t data_buffer[10];工程实践通过 typedef 封装函数指针,使回调函数定义更规范,便于后期维护。// 定义串口接收回调函数类型// 使用场景:串口驱动注册回调。

嵌入式中手 2281

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

typedef函数指针的用法

代码简化,促进跨平台开发的目的.  typedef 行为有点像 #define 宏,用其实际类型替代同义字。  不同点:typedef 在编译时被解释,因此让编译器来应付超越预处理器能力的文本替换。 用法一: typedefint(*MYFUN)(int,int); 这种用法一般用在给函数定义别名的时候 上面的例子定义MYFUN 是一个函数指针, 函数类型是带两个int 参数, 返回一

海边顽石的专栏 433

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

typedef 函数指针用法

https://blog.youkuaiyun.com/suntingsheng123/article/details/80589861 typedef 函数指针用法 2018年06月06日 09:02:20 tingsheng123 阅读数:1773 进入正文: 代码简化, 促进跨平台开发的目的. typedef 行为有点像 #define 宏,用其实际类型替代同义字。 不同点:typedef 在编译时被解...

u010029439的博客 280

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

typedef函数指针用法

1.简单的函数指针的应用 形式1:返回类型(*函数名)(参数表)  char (*pFun)(int); char glFun(int a){ return;} void main() { pFun = glFun; (*pFun)(2); }          第一行定义了一个指针变量pFun。首先我们根据前面提到的“形式1”认识

Liam Q的专栏 20万+

函数指针c语言typedef,typedef 函数指针的用法(附例子)

在网上搜索函数指针,看到一个例子。开始没看懂,想放弃,可是转念一想,这个用法迟早要弄懂的,现在多花点时间看懂它,好过以后碰到了要再花一倍时间来弄懂它。其实很多时候都是这样,如果每次到难一点的内容,总想着下次我再来解决它,那就永远也学不到东西。后面那个例子加了注释,是我对这种用法的理解,希望对新手有所帮助。进入正文:代码简化, 促进跨平台开发的目的.typedef 行为有点像 #define 宏,用...

weixin_42499586的博客 1149

关于typedef函数指针的用法和理解

关于typedef函数指针的用法和理解 在此记录下所理解的和具体用法,以防忘记了又重复找资料。。。属于找到资料后的总结,如果有错误的理解,还望提出 1、什么是函数指针 如果在程序中定义了一个函数,那么在编译时系统就会为这个函数代码分配一段存储空间,这段存储空间的首地址称为这个函数的地址。而且函数名表示的就是这个地址。既然是地址我们就可以定义一个指针变量来存放,这个指针变量就叫作函数指针变量,简称函数指针。 函数指针的定...

乄小小胖的博客 1401

[手游新项目历程]-47-typedef函数指针用法

typedef函数指针用法 点击打开链接

703

(转)typedef 函数指针的用法

typedef 函数指针的用法 在网上搜索函数指针,看到一个例子。开始没看懂,想放弃,可是转念一想,这个用法迟早要弄懂的,现在多花点时间看懂它,好过以后碰到了要再花一倍时间来弄懂它。其实很多时候都是这样,如果每次到难一点的内容,总想着下次我再来解决它,那就永远也学不到东西。 后面那个例子加了注释,是我对这种用法的理解,希望对新手有所帮助。 进入正文:  代码简化, 促进...

dianchixian5277的博客 93
上一篇: SEO优化如何让蜘蛛黏上你的站进行快照
下一篇: 再谈typedef(重点为函数指针)
simonjay2007
博客等级 码龄17年 104粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值