C语言typedef和define
C语言允许为一个数据类型起一个新的别名,就像给人起"绰号"一样。
起别名的目的不是为了提高程序运行效率,而是为了编码方便。例如有一个结构体的名字是 stu,要想定义一个结构体变量就得这样写:
struct stu stu1;
struct 看起来就是多余的,但不写又会报错。如果为 struct stu 起了一个别名 STU,书写起来就简单了:
STU stu1;
这种写法更加简练,意义也非常明确,不管是在标准头文件中还是以后的编程实践中,都会大量使用这种别名。
使用关键字 typedef 可以为类型起一个新的别名。typedef 的用法一般为:
typedef oldName newName;
oldName 是类型原来的名字,newName 是类型新的名字。例如: typedef int INTEGER; INTEGER a, b; a = 1; b = 2;
INTEGER a, b; 等效于 int a, b; 。
typedef 还可以给数组、 指针、结构体等类型定义别名。先来看一个给数组类型定义别名的例子:
typedef char ARRAY20[20];
表示 ARRAY20 是类型 char [20] 的别名。它是一个长度为 20 的数组类型。接着可以用 ARRAY20 定义数组:
ARRAY20 a1, a2, s1, s2;
它等价于:
char a1[20], a2[20], s1[20], s2[20];
注意,数组也是有类型的。例如 char a1[20]; 定义了一个数组 a1,它的类型就是 char [20],这一点已在VIP教程《 数组和指针绝不等价,数组是另外一种类型》中讲解过。
又如,为结构体类型定义别名:
typedef struct stu{ char name[20]; int age; char sex; } STU;
STU 是 struct stu 的别名,可以用 STU 定义结构体变量:
STU body1,body2;
它等价于:
struct stu body1, body2;
再如,为指针类型定义别名:
typedef int (*PTR_TO_ARR)[4];
表示 PTR_TO_ARR 是类型 int * [4] 的别名,它是一个 二维数组指针类型。接着可以使用 PTR_TO_ARR 定义二维数组指针:
PTR_TO_ARR p1, p2;
按照类似的写法,还可以为函数指针类型定义别名:
typedef int (*PTR_TO_FUNC)(int, int);
PTR_TO_FUNC pfunc;
需要强调的是,typedef 是赋予现有类型一个新的名字,而不是创建新的类型。为了"见名知意",请尽量使用含义明确的标识符,并且尽量大写。
typedef 和 #define 的区别
typedef 在表现上有时候类似于 #define,但它和宏替换之间存在一个关键性的区别。正确思考这个问题的方法就是把 typedef 看成一种彻底的"封装"类型,声明之后不能再往里面增加别的东西。
1) 可以使用其他类型说明符对宏类型名进行扩展,但对 typedef 所定义的类型名却不能这样做。如下所示:
#define INTERGE int
unsigned INTERGE n; //没问题
typedef int INTERGE;
unsigned INTERGE n; //错误,不能在 INTERGE 前面添加 unsigned
2) 在连续定义几个变量的时候,typedef 能够保证定义的所有变量均为同一类型,而 #define 则无法保证。例如:
#define PTR_INT int *
PTR_INT p1, p2;
经过宏替换以后,第二行变为:
int *p1, p2;
这使得 p1、p2 成为不同的类型:p1 是指向 int 类型的指针,p2 是 int 类型。
相反,在下面的代码中:
typedef int * PTR_INT
PTR_INT p1, p2;
p1、p2 类型相同,它们都是指向 int 类型的指针。
解锁企业数字化,思必驰论剑2019爱分析人工智能论坛12月17日,2019爱分析中国人工智能高峰论坛在北京开幕。主办方爱分析邀请了国内十数家人工智能领域头部企业与创始人及投资机构代表,共同探讨在全球数字化转型浪潮中的人工智能当下以及
曝Redmi全新骁龙870旗舰下月发布有最新爆料显示,这款骁龙870新旗舰最快将会在下个月发布,也就是说很有可能赶在双11之前正式亮相,并在双11期间主力出货。如果消息属实的话,Redmi官方或许会在下周开始为新机预热
驾驶辅助拉满!魏牌摩卡NOH智慧领航辅助驾驶系统即将上线2021年,可以说是自动驾驶的元年,智能汽车这条赛道,不仅吸引了传统车企,连手机品牌也开始布局,目前已知投身造车领域的科技品牌有华为小米苹果等。仿佛谁不去造车就跟不上时代潮流了,在
科莱恩被迫宣布不可抗力声明,阻燃塑料受到重大影响我们常说亚马逊雨林里的一只蝴蝶扇动翅膀,美国得州就可能会引起一场龙卷风,蝴蝶效应在全球一体化的今天更加明显。5月10日,云南电网发布了一则应急错峰准备通知,称当日用电高峰存在约70
TideRock收购Altratek塑料这是该控股公司今年收购的第三家塑料加工商。总部位于圣地亚哥的TideRockHoldings今天宣布收购AlratekPlastics,这是一家位于科罗拉多州朗蒙特的全方位服务定制
欧帝智慧黑板入驻黄麓师范助力幼师培养南有晓庄师范,北有黄麓师范。坐落于安徽省合肥市巢湖市黄麓镇的黄麓师范学校,是全国首批师范学校,安徽省师范教育的发端,前身可追溯到1928年张治中创建的黄麓学校。作为一所历史悠久的百
松下发布特斯拉4680原型电池日前,在一场媒体圆桌会议上,松下首次发布了该公司新电池,即4680原型电池。这款先进电池的存储容量是现有电池的5倍。松下电池部门负责人KazuoTadanobu表示,这款电池的发布
内置线性4麦阵列,京东方画屏S2开口说话!当前全球物联网产业呈爆发式增长。前瞻产业研究院数据预计,到2022年物联网市场规模或将接近7万亿元,万亿规模成了强力催化剂。虽然新产品层出不穷,但带屏智能产品早已是大众生活的标配。
软件定义芯片,TH系列芯片思必驰算法的理想载体7月1214日,由中国计算机协会CCF主办雷锋网和香港中文大学(深圳)承办的CCFGAIR2019全球人工智能与机器人峰会(以下简称CCFGAIR2019)在深圳盛大开幕。在AI芯
东软站,思必驰声动无限系列工作坊完美启程工作坊(workshop)最早于美国60年代起源,因突出的创新模式新颖的交流方式以及卓越的产出成果,被诸多企业引入,逐渐演变成以解决问题为导向以达成共识为目标以创新实践为驱动,促使
售价9。38万元12。18万元,比亚迪海豚正式上市8月29日,纯电新物种比亚迪海豚在成都车展萌动上市,四款车型的售价区间为938万元1218万元,同时为用户带来包括金融服务维修保养数据流量等多重好礼。伴着青春劲舞,比亚迪海豚化身萌