8.4 定义类型——typedef
C语言允许用户使用关键字typedef为已有的类型定义一个新的名字,例如:
typedef int integer;
该语句使名字integer与标准类型int成为同义词。有了上述定义,“类型”integer就能用与int完全相同的方法进行使用,如可进行下面的变量说明:
integer x,y,w idth,longth;
integer a[10],*p[];
定义类型的一般形式为:
typedef 类型 定义名;
这里,类型是任一种合法的数据类型,定义名是为这种类型新取的名字。
同样,使用下面的语句可以建立字符类型char的新定义名chr:
typedef char chr;
也可以用typedef为结构与联合等复杂的数据类型建立定义名,例如:
这里,把已定义的结构类型struct birth_date改为定义名birthday。利用定义名birthday,则可以定义该结构类型的变量。当要定义一个类型为struct birth_date,且包含有100个元素的结构数组时,可表示成如下形式:
birthday student[100];
上述的定义方式也可简写为如下形式:
下面是使用用户定义名record表示结构数据类型的例子。根据定义,定义名表示的结构包含有银行储户的账号、储蓄类型、姓名和存款余额四个成员。Oldcustomer和new customer是具有该结构类型的结构变量,acct[]是包含有500个结构类型元素的数组。
必须强调的是,typedef的作用,在任何意义上讲都不是创建一种新的数据类型,它仅仅为现有的类型赋给一个新的名字,也没有任何新语义,因此,由定义名说明的变量的性质,与原有类型说明的变量的性质是相同的。
使用typedef有助于使得与机器有关的程序更具有通用性,有助于使程序更加容易阅读和移植。
在结束本节讨论时,我们把C语言提供的五种自定义的构造数据类型小结如下:
1.数组是处理同种类型数据的结合体。
2.结构是一种归在同一名字下相关的不同类型变量的结合,也可称为不同数据类型的集成体。
3.位域是允许按位访问结构成员的一种特殊结构。
4.联合是两个或两个以上不同类型的成员分量公用同一内存空间的共享体。
5.枚举是一个自定义的有序标识符表。
关键字typedef不能定义一种新的数据类型,但可以为已存在的数据类型产生一个新的定义名。
常见的编程错误8.2
试图把结构和联合数据类型作为完整的实体用在关系表达式中,例如,即使TeleType和PhoneType是两个包含有相同成员的结构类型,表达式TeleType=PhoneType也是无效的。当然,一个结构或联合的单独的成员能够使用任何C语言的关系运算符进行比较。
联合一次只能存储它的一个成员,所以必须注意存入和引用的一致性。占用当前联合变量空间的是哪个成员,引用时就只能引用该成员或可替换的成员,否则会出现不一致错误。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。