6.4.1结构体结构体概述结构体概述定义结构体类型和变量定义结构体类型和变量结构体变量的引用结构体变量的引用结构体数组结构体数组结构体类的指针结构体类的指针6.4.16.4.1结构体概述结构体概述6.4.16.4.1结构体概述结构体概述一组相关的不同数据类型的数据项,可作一个整体一组相关的不同数据类型的数据项,可作一个整体来处理。来处理。CC中称结构体类型数据中称结构体类型数据。。下例中定义了结构体类型下例中定义了结构体类型studentstudent和结构体变量和结构体变量stu1,stu2stu1,stu2。。前者是数据类型,后者是变量。前者是数据类型,后者是变量。学号学号姓名姓名性别性别成绩成绩结构体类型结构体类型studentstudent11王民学王民学男男71.571.522刘刘方方女女7575结构体变量结构体变量st1st1结构体变量结构体变量st2st2定义结构体的类型•定义结构体类型•一般形式:struct[结构体类型名]{变量类型变量名;变量类型变量名;变量类型变量名;…}[结构变量名表];注意:“结构类型名”和“结构变量名表”,可省略一个。关键字关键字structstruct和它后面和它后面的结构体类型名一起组的结构体类型名一起组成一个新的数据类型名成一个新的数据类型名例例structstudentstructstudent{intnum;{intnum;charname[20];charname[20];charsex;charsex;intage;intage;floatscore;floatscore;};};namenumsexagescore2字节2字节20字节1字节4字节…结构体类型定义描述结构的组织形式,不分配内存例子图解例子图解定义结构体的变量•定义结构体变量1.定义结构体的同时定义structstudent{….}st1,st2;2.先定义结构体,后定义结构体变量例:structstudent{….};structstudentst1,st2;3.直接定义例:struct{….}st1,st2;在struct后不出现结构体类型名例例structstudentstructstudent{intnum;{intnum;charname[20];charname[20];charsex;charsex;intage;intage;charaddr[30];charaddr[30];};};structstudentstu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};structstudentstu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};结构体变量的初始化结构体变量的初始化例例structstudentstructstudent{intnum;{intnum;charname[20];charname[20];charsex;charsex;intage;intage;charaddr[30];charaddr[30];}stu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};}stu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};例struct{intnum;charname[20];charsex;intage;charaddr[30];}stu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};–引用规则引用规则•结构体变量不能整体引用结构体变量不能整体引用,,只能引用变量成员只能引用变量成员★可以将一个结构体变量赋值给另一个结构体变量例如:例如:tomorrw=today;tomorrw=today;引用方式:结构体变量名引用方式:结构体变量名..成员名成员名6.4.26.4.2结构体变量的引用结构体变量的引用输入今天的日期,然后输出该日期。输入今天的日期,然后输出该日期。main()main(){structdate{structdate/*/*定义结构类型定义结构类型date*/date*/{intyear;{intyear;intintmonth;month;intintday;};day;};structdatetoday,structdatetoday,tomorrowtomorrow;;/*/*说明结构变量说明结构变量today*/today*/scanf("%d%d%d",&today.year,&today.month,&today.day);scanf("%d%d%d",&today.year,&today.month,&today.day);printf("%d.%d.%d\n",today.year,today.month,today.day);printf("%d.%d.%d\n",today.year,today.month,today.day);}}structstudent{intnum;charname[20];charsex;structdatebirthday;floatscore;}stu1,stu2;structdate{intmonth;intday;intyear;};结构体嵌套时逐级引用结构体嵌套时逐级引用◆对上面定义的结构变量对上面定义的结构变量stu1stu1,,可以这样访问各个成员:可以这样访问各个成员:stu1.numstu1.numstu1.namestu1.namestu1.sexstu1.sexstu1.birthday.monthstu1.birthday.monthstu1.birthday.daystu1.birthday.daystu1.birthday.yearstu1.birthday.year6.4.3结构体类的指针•指向结构体类变量的指针指向结构体类变量...