学习笔记2 —— typedef设置别名

一、设置类型别名的格式

所谓设置类型别名,就是给数据类型起一个新的名字,就像给人起“绰号”一样。typedef 是赋予现有类型一个新的名字,而不是创建新的类型。为了“见名知意”,请尽量使用含义明确的标识符,并且尽量大写。
设置类型别名的格式为:

typedef 原类型 新类型名;

1.给普通类型设置别名

typedef int DATATYPE;
DATATYPE a;

它等价于

int a;

2.给结构体类型设置别名

例如有一个结构体的名字是stu,要想定义一个结构体变量就得这样写:

struct stu stu1;

struct看起来就是多余的,如果为struct stu起一个别名STU,书写起来就简单多了。这种写法更加简练,意义也非常明确,不管在标准头文件还是以后的编程实践中,都会大量使用这种别名。

typedef struct stu STU;
STU stu1;

3.给数组类型设置别名

typedef char ARRAY20[20];

表示ARRAY20是类型char[20]的别名,它是一个长度为20的字符数组类型,接着可以用ARRAY20定义数组:

ARRAY20 a1,a2,a3,a4;

它等价于

char a1[20], a2[20], a1[20], a2[20];

4.给指针类型设置别名

int *a;

等价于

typedef int *STRING;
STRING a;

5.给数组指针类型设置别名

typedef int (*PTR_TO_ARR)[4];

表示 PTR_TO_ARR 是类型int (*) [4]的别名,它是一个二维数组指针类型。接着可以使用 PTR_TO_ARR 定义二维数组指针:

PTR_TO_ARR p1, p2;

6.给函数指针类型设置别名

typedef int (*MyFUN)(int a,int b);
int Max(int a,int b);
MyFUN pMyFun;
pMyFun= Max;

设置类型别名之后,新类型名具有与原类型名相同的数据类型,用户可以随意选择使用新类型名和原类型名,效果是一样的,那设置类型别名有什么好处呢?起别名的目的不是为了提高程序运行效率,而是为了编码方便。

二、设置类型别名的好处

1.简化长类型名

C语言中,有些数据类型的名字比较长,很容易造成书写错误。若给这样的数据类型设置一个简短的别名,就能减少书写上的错误。

例如

typedef unsigned int uint;

通过typedef给unsigned int类型设置一个简短的别名uint,后面的代码中需要使用unsigned int的地方,可以使用uint,是不是方便多了呢,类型别名的字符少了,书写自然就会减少。

2.便于代码维护(平台无关性) —— 重要

例如我们给short类型设置一个别名“DATATYPE”,在代码中都使用这个别名:

typedef short DATATYPE;

过了一段时间后,发现short类型太小了,不够用,想换大的类型int,那么只需改动设置类型别名的地方:

typedef int DATATYPE;

现在代码中所有的DATATYPE都表示为int类型了。是不是很方便?若是没有设置类型别名的地方,就得到代码中一一查找要修改的地方,对于代码量大的程序来说工程量很大。

3.扩展类型信息

在保存某人的基本信息的代码中,如果看到一个int类型的变量,怎么能知道这个变量所表示的是什么呢?是人的身高、体重还是年龄?这时可以给int类型设置类型别名:

typedef int age;

在代码中,变量类型使用age,这样一下子就能明白这个变量保存的是一个人的年龄。

三、typedef与#define的区别

#define(宏定义)是预处理指令只是简单的字符串代换(原地扩展),它本身并不在编译过程中进行,而是在这之前(预处理过程)就已经完成了。在预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错。

typedef在编译时处理的。它在自己的作用域内给一个已经存在的类型一个别名,是为了增加可读性而为标识符另起的新名称(仅仅只是个别名),它的新名字具有一定的封装性,以致于新命名的标识符具有更易定义变量的功能,它是C语言编译过程的一部分,但它并不实际分配内存空间

一般都遵循#define定义“可读”的常量以及一些宏语句的任务,而typedef则常用来定义关键字冗长的类型的别名

typedef是语句( 以结尾),而#define不是语句( 不以结尾)

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是北豼不太皮吖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值