2019独角兽企业重金招聘Python工程师标准>>>

typedef工具是一种高级数据特性,它使您能够为某一类型创建您自己的名字。在这方面,它和#define相似,但是它们有3个不同之处:

1、与#define不同,typedef给出的符号名称仅限于对类型,而不是对值 。

2、typedef的解释由编译器,而不是预处理器执行。

3、虽然它的范围有限,但在其受限范围内,typedef比#define更灵活。

假设要对1字节的数值使用术语BYTE,您只须像定义一个char变量那样定义BYTE,然后在这个定义前面加上关键字typedef,如:

typedef unsigned char BYTE;

随后,您就可以使用BYTE来定义变量了:

BYTE x,y[10], *z;

该定义的作用域取决于typedef语句所在的位置,如果定义在一个函数内部,它的作用域限定在那个函数里,如果定义在函数外部,它将具有全局作用域。

通常,这些定义使用大写字母,以提醒这个类型名称实际上是一个符号缩写。

管理变量名的同样规则也用来管理typedef使用的名字。

在前面的例子中,使用BYTE来代替unsigned char有助于说明您打算用BYTE变量来表示数值而非字符编码。使用typedef也有助于增加可移植性。例如,我们已经提到过表示sizeof运算符返回类型的size_t类型,以及表示函数time()的返回值类型的time_t类型。C标准规定sizeof和time()应返回整数类型,但它留给具体的实现来决定到底是哪种整数类型。不进行指定的原因是ANSI C委员会觉得没有一个对所有计算机平台来说都是最好的选择。因此,他们提出一个新类型名称,如,time_t,让C实现使用typedef来把这个名称设定为某种特定的数据类型。这样,他们可以提供以下通用原型:

time_t time(time_t *);

在一个系统上,time_t可能是unsigned int类型;在另一个系统上,它可能是unsigned long类型。只要包含了time.h头文件,程序就可以访问适当的定义,您也可以在代码中声明time_t变量。

使用#define可以实现typedef的一部分功能,例如:

#define BYTE unsigned char

这使预处理器用unsigned char来代替BYTE。但也有#define实现不了的功能,如下例所示:

typedef char * STRING;

如果没有关键字typedef,该例将STRING识别为一个char指针,有了这个关键字,使STRING成为char指针 的标识符。因此:

STRING name,sign;

意思是:

char *name,*sign;

但是假设这样做:

#define STRING char*

那么:

STRING name,sign;

将会被翻译成下面的形式:

char *name,sign;

在这种情况下,只有name是一个指针。

也可以对结构使用typedef:

typedef struct complex{float real;float imag;
}COMPLEX;

这样您就可以使用COMPLEX代替struct complex来表示复数。使用typedef的一个原因是为经常出现的类型创建一个方便的、可识别的名称。

使用typedef来命名一个结构类型时,可以省去结构的标记:

typedef struct {double x;double y;} rect ;

假设像下面这样使用typedef定义的类型名:

rect r1={3.0,6.0};

rect r2;

r2=r1;

将被翻译成:

struct {double x;doubley;} r1={3.0,6.0};

struct {double x;double y;} r2;

r2=r1;

如果两个结构的声明都不使用标记,但是使用相同的成员(成员名和类型都匹配),那么C认为这两个结构具有同样的类型,因此将r1赋给r2是一个正确的操作。

使用typedef的另一个原因是,typedef名称经常被用于复杂的类型。例如

typedef char (*FRPTC())[5];

这把FRPTC声明为一个函数类型,该类型的函数返回一个指向含有5个元素的char数组的指针。

当使用typedef时,要记住它不是创建新的类型,它只是创建了便于使用的标签 。这意味着,例如,我们创建的STRING类型的变量可以作为参数传递给需要char指针类型参数的函数 。

通过结构、联合和typedef,C提供了有效和方便地处理数据的工具。

转载于:https://my.oschina.net/idreamo/blog/868051

第14章 结构和其他数据形式 14.12 typedef 简介相关推荐

  1. 第 14 章 结构和其他数据形式(names)

    1 *--------------------------------- 2 names1.c -- 使用指向结构的指针 3 ---------------------------------*/ 4 ...

  2. 第十四章 结构和其他数据形式

    GitHub地址,欢迎 star 文章目录 14.1 示例问题:创建图书目录 14.2 建立结构声明 14.3 定义结构变量 14.3.1 初始化结构 注意 初始化结构和类别储存期 14.3.2 结构 ...

  3. 《C Primer Plus》第十四章——结构和其他数据形式

    文章目录 结构和其他数据形式 本章内容 示例问题:创建图书目录 建立结构声明 定义结构变量 初始化结构 访问结构成员 结构的初始化器 结构数组 声明结构数组 标识结构数组的成员 程序讨论 嵌套结构 指 ...

  4. C Primer Plus (第五版) 第十四章 结构和其它数据形式 编程练习

    重做复习题3.但用月份名的拼写代替月份号(别忘了可以使用strcmp()). #include <stdio.h> #include <string.h>struct mont ...

  5. C语言基础:结构和其他数据形式

    5# C语言基础:结构和其他数据形式 文章目录 Tips1:<img src="https://dl4.weshineapp.com/gif/20170410/5e0f6e9365be ...

  6. 【机器学习实战】第14章 利用SVD简化数据

    第14章 利用SVD简化数据 SVD 概述 奇异值分解(SVD, Singular Value Decomposition):提取信息的一种方法,可以把 SVD 看成是从噪声数据中抽取相关特征.从生物 ...

  7. 【学习笔记】《深入浅出Pandas》第14章:Pandas时序数据

    文章目录 14.1 固定时间 14.1.1 时间的表示 14.1.2 创建时间点 14.1.3 属性 14.1.4 时间的方法 14.1.5 时间缺失值 14.2 时长数据 14.2.1 创建时间差 ...

  8. 《Python数据分析与挖掘实战》第14章——基于基站定位数据的商圈分析(层次聚类)

    本文是基于<Python数据分析与挖掘实战>的实战第14章<基于基站定位数据的商圈分析>做的分析. 1 挖掘背景及目标 从某通信运营商提供的特定接口解析得到用户的定位数据.利用 ...

  9. C语言再学习 -- 结构和其他数据形式

    一.结构体 结构体可以用来创建新的数据类型,这种数据类型可以把多个其他类型合并成一个整体,采用结构体声明的变量叫做结构变量,结构体需要先声明然后才能使用,声明结构体需要使用struct关键字,结构体声 ...

最新文章

  1. 什么是整洁的代码?什么是肮脏的代码?
  2. 李飞飞重回斯坦福,Andrew Moore接手谷歌云AI
  3. 浅谈深浅拷贝问题(这里只针对拷贝构造函数和赋值运算符重载)和简易srting类模拟实现
  4. 禁止word另存为,禁止图片另存为excel禁止另存为
  5. 理论+实践,带你掌握动态规划法
  6. 【算法导论】第24章迪杰斯特拉算法
  7. Java根类--Object类
  8. 全球系留无人机系统行业调研及趋势分析报告
  9. 乔布斯的这 3 个故事依然激励着我
  10. 让我摘下星星送给你_去最美的地方,我摘下星星给你。
  11. 累死你的不是工作方式
  12. React中input输入框中文输入的问题
  13. 云服务器和云虚拟主机有什么区别
  14. ------已搬运-------BUUCTF:[BJDCTF 2nd]假猪套天下第一-----------Header请求头学习!!!
  15. 【存储】GPFS简介及搭建
  16. c# picturebox控件的使用方法介绍
  17. Mapbox矢量瓦片pbf文件信息解析
  18. 华为200万年薪博士应届生大起底——8位“天才少年”的学校专业背景
  19. KAKA 漫威卡牌设计图首次流出!KAKA NFT 卡牌即将面向全球拍售!
  20. mac npm install XX权限权限报错的完美解决方法

热门文章

  1. Java中多线程概念详解
  2. Vmware学习虚拟机操作时遇到的问题和解决
  3. ROS学习(十二):ROS URDF-model_state
  4. 单独写原则Single Writer Principle
  5. Python 每次处理一个字符
  6. urllib2使用总结
  7. WP7 APP 猜数字 V2.0 更新
  8. 访问MS Access 系统表 MSysObjects ,在SQL SERVER 2005中访问
  9. Android Studio通过JNI调用NDK程序
  10. Common Lisp 初学者快速入门指导