ARRAY为数组类型,包含了10个元素。因此,a、b、c、d都被定义为一维数组,含10个元素。可以看到,用typedef可以将数组类型和数组变量分离开来,利用数组类型可以定义多个数组变量。同样可以定义字符串类型、指针类型等。
用typedef只是对已经存在的类型增加一个类型名,并没有创造新的类型。例如,前面定义的无符号字符类型uchar-无非是对unsignedchar类型另给一个新名字。无论用哪种方式定义变量,效果都是一样的。
typedef与#define有相似之处,如下面的两个语句作用相同,都是用uchar代表unsignedchar。
但事实上两者是不同的。#define是在预编译时处理的,只能作简单的字符串替换,而typedef是在编译时处理的,并不是作简单的字符串替换,例如:
并不是用ARRAY[10]去代替int,而是采用如同定义变量的方法那样来定义一个类型(就是前面介绍的将原来的变量名换成类型名)。
当不同源文件中用到同一类型数据(尤其是像数组、指针、结构体、联合体等类型数据)时,常用typedef定义一些数据类型,把这些数据类型单独放在一个文件中,然后在需要用到这些数据类型的文件中用#include命令包括进来。
7.6 小结
结构体和联合体是两种构造类型数据,是用户定义新数据类型的重要手段。结构和联合有很多的相似之处:两者都由成员组成;成员可以具有不同的数据类型;成员的表示方法相同,都可用3种方式作变量说明。但两者有着本质的区别:在结构体中,各成员都占有自己的存储空间,是同时存在的,一个结构体变量的总长度等于所有成员长度之和;在联合体中,所有成员不能同时占用存储空间,不能同时存在。联合体变量的长度等于最长的成员的长度。
“.”是成员运算符,可用其表示成员项。在指向结构体或联合体的指针变量中,成员还可用“一”运算符来表示。
结构变量可以作为函数参数,函数也可返回指向结构的指针变量。而联合变量不能作为函数参数,函数也不能返回指向联合的指针变量。但可以使用指向联合变量的指针,也可使用联合数组。
结构定义允许嵌套,结构中也可用联合作为成员,形成结构和联合的嵌套。
枚举变量的值限制在定义时规定的几个枚举元素范围内,如果被赋予一个其他的值就会出现出错信息,便于检查。
可以先用类型定义关键字(typedf)为已经存在的数据类型定义一个新的名称,再用新的数据类型名定义变量,可以使程序变得更为清晰。
展开