typedef 声明,简称 typedef,为现有类型创建一个新的名字。比如人们常常使用 typedef 来编写更美观和可读的代码。所谓美观,意指 typedef 能隐藏笨拙的语法构造以及平台相关的数据类型,从而增强可移植性和以及未来的可维护性。
在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。

typedef的使用方法如下:

typedef existing_type new_type_name ;

注意:typedef 并不创建新的类型。它仅仅为现有类型添加一个同义字。

typedef的最简单使用

typedef int size;
typedef unsigned int WORD;
  • 第一个声明定义了一个char的同义词,名字为C,你可以在任何需要int的上下文使用size。
  • 第二个声明定义了一个unsigned int的同义词,名字为WORD,你可以在任何需要int的上下文使用WORD。

typedef和数组,指针

我们可以不用象下面这样重复定义有 81 个字符元素的数组:

char line[81];
char text[81];

定义一个 typedef,每当要用到相同类型和大小的数组时,可以这样:

typedef char Line[81];
Line text, secondline;

同样,可以象下面这样隐藏指针语法:

typedef char * pstr;
pstr str = "abc";
int mystrcmp(pstr, pstr);

typedef和函数

函数指针一般用于回调,例如信号处理,libcurl等会应用到回调。回调是比较常用的技术,而回调就要涉及函数指针。
当我们的程序中有以下函数:

void printHello(int i);

然后我们要定义一个函数指针,指向printHello,并且调用这个方法,代码如下:

void (*pFunc)(int);
pFunc = &printHello;
(*pFunc)(110);

其中void (*pFunc)(int)是声明一个函数指针,指向返回值是void,调用参数是(int)的函数,变量名是pFunc,pFunc就是函数指针了,以前是函数指针的简单用法。
大家可以看到,声明一个函数指针是比较复杂的,尤其是当你要在多处地方声明同一个类型的函数指针变量,代码更加复杂,所以有下面简化的做法:

typedef void (*PrintHelloHandle)(int);
使用代码如下:
PrintHelloHandle pFunc;
pFunc = &printHello;
(*pFunc)(110);

以后其他地方的程序需要声明类似的函数指针,只需要下面代码:

PrintHelloHandle pFuncOther;

这样,我们的代码就变得更加简洁易懂。

typedef心得

大家在看typedef和数组,指针以及typedef和函数,可能会觉得typedef比较复杂,但是其实typedef 行为有点像 #define 宏,用其实际类型替代同义字。
请看看下面例子​​​​​​​

typedef char * pstr;
pstr mystr;

代码pstr mystr,展开之后就是char * mystr,把mystr,替换为语句typedef char * pstr的pstr,展开之后还是char * mystr。
typedef并不创建新的类型,typedef 在编译时被解释,因此让编译器来应付超越预处理器能力的文本替换而已。
这些规则可以应用到typedef和数组:

typedef char Line[81];
Line text;

把text替换为typedef char Line[81]的Line,展开之后就是

char text[81];

也可以应用到最复杂的typedef和指针​​​​​​​

typedef void (*PrintHelloHandle)(int);
PrintHelloHandle pFunc;

将pFunc替换typedef void (*PrintHelloHandle)(int),展开之后就是

void (*pFunc)(int);

其实就是声明一个pFunc函数指针而已,根本没有PrintHelloHandle这种类型。

C/C++ typedef用法相关推荐

  1. typedef用法小结

    Typedef 声明有助于创建平台无关类型,甚至能隐藏复杂和难以理解的语法.不管怎样,使用 typedef 能为代码带来意想不到的好处,通过本文你可以学习用 typedef 避免缺欠,从而使代码更健壮 ...

  2. 关于C++中函数指针的使用(包含对typedef用法的讨论)

    关于C++中函数指针的使用(包含对typedef用法的讨论) (一)简单的函数指针的应用. //形式1:返回类型(*函数名)(参数表) char (*pFun)(int); char glFun(in ...

  3. typedef用法(1)

    Typedef 声明有助于创建平台无关类型,甚至能隐藏复杂和难以理解的语法.不管怎样,使用 typedef 能为代码带来意想不到的好处,通过本文你可以学习用 typedef 避免缺欠,从而使代码更健壮 ...

  4. typedef 用法详解

    第一部分 基本概念 1.基本解释 typedef为C语言的关键字,作用是为一种数据类型定义一个新名字.这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等). 在编程 ...

  5. C和C++中struct的typedef用法建议

    C和C++中struct的typedef用法建议 参考文章(建议先读) 根据参考的文章,总结一下: 情况1 C语言中: typedef struct{ ···: }aaa; 则aaa是struct类的 ...

  6. Typedef用法(转载)

    在C的学习过程中,现在才发现,以前有那么多被忽略的重点:现在是慢慢拾起这些重点的时候,通过百度和博客,我感觉我学到了很多东西,自己只是在别人说的基础上,按照自己学习的过程在这里记录一下,以后有时间回过 ...

  7. Typedef用法学习

    不管实在C还是C++代码中,typedef这个词都不少见,当然出现频率较高的还是在C代码中.typedef与#define有些相似,但更多的是不同,特别是在一些复杂的用法上,就完全不同了,看了网上一些 ...

  8. Typedef 用法总结

    http://www.cnblogs.com/csyisong/archive/2009/01/09/1372363.html 不管实在C还是C++代码中,typedef这个词都不少见,当然出现频率较 ...

  9. C语言中typedf函数的用法,C语言中typedef用法详解

    在C语言中,经常有如下的用法: typedef struct  tag{    ...} MyType, *MyPtr; 一旦通过如上定以后,就可以用MyType来定义struct tag结构了. 以 ...

  10. c语言typedef的用法,C语言中typedef用法总结,看完就能像编程老手一样熟练运用...

    请看下文 C语言中typedef关键字应用比较常见,许多C语言初学者对它的用法不甚了解.事实上,我们可以用typedef来定义自己习惯使用的数据类型名称,可以替代自己所熟悉的基本类型.数组类型.指针类 ...

最新文章

  1. python3.4编程_求教python3.4的编程问题
  2. ASP.NET Core开发者成长路线图
  3. linux uart中断程序,linux 串口中断实现
  4. [转]在Visual Studio 2013/2015中设计UML活动图
  5. r 语言 ggplot上添加平均值_R语言中ggplot2包作数据分布情况下的统计图实例学习(一)
  6. Infinity 插件设置
  7. python课程设计汽车销售管理系统_汽车销售管理系统--课程设计
  8. CIFAR-10数据集目录结构以及数据组织格式
  9. 滴滴打车CTO张博:我们要这样玩社区和大数据
  10. sgfdgfadsg
  11. 时钟程序设计java_Java数字时钟实现代码详解
  12. spring boot 使用javaMailSender 发送qq邮箱验证码
  13. 安腾处理器 oracle,英特尔展示下一代安腾处理器Poulson
  14. 如何从ext3升级到ext4?
  15. Dojo 1.6 最新官方教程: Dojo DOM 函数
  16. QTableWidget点击空白处取消选中
  17. 基于函数微分推导出的5个近似公式
  18. PS2020一打开就闪退的解决办法
  19. ERP系统方案的实施步骤
  20. 用pycharm写飞机大战

热门文章

  1. 中南大学电磁场理论matlab,电磁场 点电荷 电场线 电势 matlab仿真 中南大学.doc_蚂蚁文库...
  2. 中南大学电磁场理论matlab,中南大学电磁场理论实验2.doc
  3. 用LabVIEW打包EXE应用文件和打包程序安装文件的方法
  4. [ZT]大型企业局域网安全解决方案
  5. 世界500强面试题(情商部分)
  6. windows10 记事本进程 键盘消息钩子 dll注入
  7. 7360打印机linux驱动下载,兄弟7360打印机驱动
  8. TwinCAT软件编码器参数介绍
  9. TwinCAT3入门使用经验
  10. foxmail html模板,Foxmail“邮件模板”功能全攻略