资源描述:
《C语言程序设计 李丽娟 等 第9章_结构》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第九章结构体与共用体C语言程序设计在实际问题中,一组数据往往具有不同的数据类型。例如,在学生登记表中,姓名应为字符型;学号可为整型或字符型;年龄应为整型;性别应为字符型;成绩可为整型或实型。因为一个数组中只能存放同一种数据类型的数据,故不能用一个数组来存放这一组数据;如单独定义为互相独立的简单变量,难以反映它们之间的内在联系。为更好地解决诸如此类问题,C语言采用构造数据类型,通过构造数据类型可以很好地将一些不同类型的数据作为一个整体进行处理。9.1结构体9.1.1结构类型定义和结构变量说明“结构”是一种构造类型,它是由
2、若干“成员”组成的。每一个成员可以是一个基本数据类型或者又是一个构造类型。结构既是一种“构造”而成的数据类型,那么在说明和使用之前必须先定义它,也就是构造它。struct[结构体名]{类型标识符成员名;类型标识符成员名;…………….};成员类型可以是基本型或构造型struct是关键字,不能省略合法标识符可省:无名结构体一、结构的定义例structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};namenumsexagescoread
3、dr2字节2字节20字节1字节4字节30字节……..结构体类型定义描述结构的组织形式,不分配内存结构体类型定义的作用域括号后的分号不可省。结构定义之后,即可进行变量说明。结构是一种复杂的数据类型,是数目固定,类型不同的若干有序变量的集合。二、结构体变量说明例structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};structstudentstu1,stu2;先定义结构体类型,再定义结构体变量一般形式:struct结构体名{类型标
4、识符成员名;类型标识符成员名;…………….};struct结构体名变量名表列;例#defineSTUDENTstructstudentSTUDENT{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};STUDENTstu1,stu2;定义结构体类型的同时定义结构体变量一般形式:struct结构体名{类型标识符成员名;类型标识符成员名;…………….}变量名表列;例structstudent{intnum;charname[20];charsex;int
5、age;floatscore;charaddr[30];}stu1,stu2;直接定义结构体变量一般形式:struct{类型标识符成员名;类型标识符成员名;…………….}变量名表列;例struct{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;用无名结构体直接定义变量只能一次说明结构体类型与结构体变量概念不同类型:不分配内存;变量:分配内存类型:不能赋值、存取、运算;变量:可以结构体可嵌套结构体成员名与程序中变量名可相同,不会混
6、淆结构体类型及变量的作用域与生存期例structdate{intmonth;intday;intyear;};structstudent{intnum;charname[20];structdatebirthday;}stu;numnamebirthdaymonthdayyear例structstudent{intnum;charname[20];structdate{intmonth;intday;intyear;}birthday;}stu;numnamebirthdaymonthdayyear9.1.2结构体变量的
7、引用引用规则结构体变量不能整体引用,只能引用变量成员可以将一个结构体变量赋值给另一个结构体变量结构体嵌套时逐级引用成员(分量)运算符优先级:1结合性:从左向右引用方式:结构体变量名.成员名例structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;stu1.num=10;stu1.score=85.5;stu1.score+=stu2.score;stu1.age++;例structstudent{intnum;
8、charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;printf(“%d,%s,%c,%d,%f,%s”,stu1);()stu1={101,“WanLin”,‘M’,19,87.5,“DaLian”};()例structstudent