资源描述:
《结构体与共用体》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、《C程序设计》作者:谭浩强主讲:小甲鱼第十章结构体与共用体目录概述定义结构体类型变量的方法结构体变量的引用结构体变量的初始化结构体数组指向结构体类型数据的指针用指针处理链表共用体枚举类型用typedef定义类型概述问题定义:有时需要将不同类型的数据组合成一个有机的整体,以便于引用。如:一个学生有学号/姓名/性别/年龄/地址等属性intnum;charname[20];charsex;intage;intcharaddr[30];numnamesexageaddr007JaneM24Beijing概述定义一个结构的一般形式为:struct结构名{成员表列};成员表列由若干个成员组成,
2、每个成员都是该结构的一个组成部分。对每个成员也必须作类型说明,其形式为:类型说明符成员名;概述structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}定义结构体类型变量的方法可以采取以下3种方法定义结构体类型变量:(1)先声明结构体类型再定义变量名例如:structstudentstudent1,student2;
3、
4、
5、
6、类型名结构体变量名变量名定义了student1和student2为structstudent类型的变量,即它们具有structstudent类型的结构.定义结构体类型变量的方
7、法structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}student1,student2在定义了结构体变量后,系统会为之分配内存单元。例如:student1和student2在内存中各占?个字节。(4+20+1+4+4+30=67)。定义结构体类型变量的方法(2)在声明类型的同时定义变量这种形式的定义的一般形式为:struct 结构体名{成员表列}变量名表列;例如:structstudent{intnum;charname[20];charsex;intage;floatscore;cha
8、raddr[30];}student1,student2;定义结构体类型变量的方法(3)直接定义结构体类型变量其一般形式为:struct{成员表列}变量名表列;即不出现结构体名。~看图下定义~birthdayNumnamesexageaddrMonthdayyear结论:这是一个嵌套的定义~看图下定义~首先定义一个结构date,由month(月)、day(日)、year(年)三个成员组成。在定义并说明变量boy1和boy2时,其中的成员birthday被说明为data结构类型。成员名可与程序中其它变量同名,互不干扰。structdate{intmonth;intday;intyear
9、;};struct{intnum;charname[20];charsex;structdatebirthday;floatscore;}boy1,boy2;例子01结构体变量的引用在定义了结构体变量以后,当然可以引用这个变量。但应遵守以下规则:(1)不能将一个结构体变量作为一个整体进行输入和输出。例如:打印student1的各个变量的值。可以这样吗?printf(″%d,%s,%c,%d,%f,%\n″,student1);结构体变量的引用正确引用结构体变量中成员的方式为:结构体变量名.成员名student1.num表示student1变量中的num成员,即student1的num
10、(学号)项。可以对变量的成员赋值,例如:student1.num=100;“.”是成员(分量)运算符,它在所有的运算符中优先级最高,因此可以把student1.num作为一个整体来看待。上面赋值语句的作用是将整数100赋给student1变量中的成员num。结构体变量的引用例子01:example02.c(2)如果成员本身又属一个结构体类型,则要用若干个成员运算符,一级一级地找到最低的一级的成员。只能对最低级的成员进行赋值或存取以及运算。对上面定义的结构体变量student1,可以这样访问各成员:student1.numstudent1.birthday.month结构体变量的引用(
11、3)对结构体变量的成员可以像普通变量一样进行各种运算(根据其类型决定可以进行的运算)。例如:student2.score=student1.score;sum=student1.score+student2.score;student1.age++;++student2.age;结构体变量的引用(4)可以引用结构体变量成员的地址,也可以引用结构体变量的地址。例子03:example03.c但不能用以下语句整体读入结构体变量:scanf(″%d,%s,%c,