资源描述:
《自定义数据类型12.28》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、结构体类型及其定义1.结构体类型的概念使用数组这样的构造数据类型可以将多个数据用一个名字命名,为存储和处理带来很大方便。但是,现实生活中还存在着大量需要作为一个整体来处理的数据,而这些数据的类型又不相同。例如:要处理学籍数据,需要处理学生学号(num)、姓名(name)、性别(sex)、年龄(age)、成绩(score)和地址(addr)等数据。这样一组相互关联的数据,用简单变量存储,难以反映出它们的内在联系的。2.结构体类型的定义定义结构体类型,需要定义该结构体类型的名字以及声明组成结构体的各成员,因此它是由声明成员的一组
2、语句组成的,形式为struc结构体名{成员声明表列};例如上述处理学籍的结构体类型定义语句为:structStudent{intnum;/*成员名*/charname[20];charsex;intage;floatscore;charaddr[30];};说明:(1)结构体类型并非只有一种,而可以有千千万万种(2)一个结构体类型的标志由两个单词组成:第一个单词为关键字struct,它表明该类型是一种结构体类型;第二个单词是结构体名,如前面介绍的Student、Add,也称为“标记”或“符标”(flag),由程序设计者按标识
3、符规则指定。这二者联合起来组成一个“类型标识符”即“类型名”。(4)声明一个结构体类型,并不意味着系统将分配一段内存单元来存放各数据项成员。请注意这是声明类型而不是定义变量,声明一个类型只是表示这个类型的结构,即告诉系统它由哪些类型的成员构成,各占多少个字节,各按什么形式存储,并把它们当作一个整体来处理。应当明确,只声明类型是不分配内存单元的,例如系统声明了int,float等类型,但并不具体分配内存单元,它只反映一种数据属性,是对具体数据的“抽象”。正如同说“汽车是车”,车就是一种“抽象”,世界上只有具体的汽车、自行车、卡
4、车、…,把“有轮子的、在地上走动的、有一定运载能力的”特征抽象为“车”。人们只有拥有具体的汽车或自行车…,才算拥有该财产。同样,一种类型只表明一种特征,如果以后定义变量为该类型,该变量应当具备这种特征,只有在定义变量以后,才占据存储单元。(5)系统没有预先声明结构体类型,凡需使用结构体类型数据的,都必须在程序中自己定义。7.5.2定义结构体类型变量及对变量的初始化定义一个结构体类型后,得到一个结构体类型名。有了这个类型名,就可以像int、char、float和double一样,用来定义一些结构体类型的变量。定义了变量,系统就
5、会为变量分配存储空间。1.定义结构体变量可以采用不同的方法定义一个结构体类型的变量。(1)在定义了一个结构体类型之后,把变量定义为该类型。如有以下声明:structStudentstdnt1,stdnt2,stdnt3;在声明一个结构体类型的同时定义一个或若干个结构体变量。如:structStudent{unsignedintnum;charname[20];charsex;intage;floatscore;charaddr[30];}stdnt1,stdnt2,stdnt3;它的一般形式为:struct结构体名{成员声明
6、表列}变量名表列;这种形式紧凑,既声明了类型,又定义了变量。如果需要再用此structStudent定义其它变量,还可以用:structStudentstdnt3,stdnt4,stdnt5;再定义三个structStudent类型的变量。定义后的变量,在程序运行时将内分配连续的一片存储单元。可以用sizeof运算符测出一个结构体类型数据的长度,它的长度是结构体成员中各个域所占的内存之和。例如使用表达式。或使用表达式sizeof(structStudent)sizeof(stdnt1)2.结构体变量的初始化在定义了结构体变量
7、之后,stdnt1,stdnt2,stdnt3等就具有structStudent结构体类型的特征,也有了变量的特征。但是,这些变量不是简单变量,它们的值也不是一个简单的整数、实数或字符等,而是由许多个基本数据组成的复合的值。例如,stdnt1、stdnt2和stdnt3的值可以有如下图所示的值。与简单变量的初始化类似,结构体变量的初始化应当在变量定义时进行,并且要把初始值依次写在一对花括号内,用赋值运算符赋值给对应的变量。如structStudent{unsignedintnum;charname[20];charsex;i
8、ntage;floatscore;charaddr[30];}stdnt1={50201,”ZhangXi”,’M’,18,90.5,”Shanghai”},stdnt2={50202,”WhangLi”,’F’,19,88.3,”Beijing”};也可以用以下形式StructStude