您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 第7章结构体与共用体.
1第七章结构体、共用体和枚举第七章结构体、共用体和枚举2本章要点结构体类型的定义和引用结构体数组指向结构体变量的指针共用体枚举第七章结构体、共用体和枚举第七章结构体、共用体和枚举3问题的引出•在日常生活中,我们常常会遇到一些需要填写的登记表,如住宿表、成绩表、通讯地址等等。•例如:填写一个学生的学号、姓名、性别、年龄和地址等信息。intnum;charname[20];charsex;intage;floatscore;charaddr[30]•应当把它们组织成一个组合项,在一个组合项中包含若干个类型不同(当然也可以相同)的数据项。100101LiFunM1887.5BeijingNumnamesexagescoreaddr第七章结构体、共用体和枚举4定义一个结构体类型的一般形式为:struct结构体名{成员表列};如:structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};结构体名类型名成员名7.1结构体类型的定义对各成员都应进行类型声明,即类型名成员名;第七章结构体、共用体和枚举57.2结构体类型变量的定义和引用7.2.1结构体类型变量的定义可以采取以下3种方法定义结构体类型变量:(1)先定义结构体类型,再定义变量名例如:structstudentstudent1,student2;|||结构体类型名结构体变量名定义了student1和student2为structstudent类型的变量,即它们具有structstudent类型的结构。•图11-2student1100101ZhangXinM1990.5Shanghai100102WangLiF2098Beijingstudent2第七章结构体、共用体和枚举6当定义了结构体类型后,系统不分配内存空间,只有当定义了结构体类型变量之后,系统才会为之分配内存空间。例如:structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};structstudentstudent1,student2;student1和student2在内存中各占59个字节(2+20+1+2+4+30=59)。7.2结构体类型变量的定义和引用第七章结构体、共用体和枚举77.2结构体类型变量的定义和引用注意:将一个变量定义为标准类型(基本数据类型)与定义为结构体类型不同之处在于后者不仅要求指定变量为结构体类型,而且要求指定为某一特定的结构体类型。因为可以定义出许许多多种具体的结构体类型。而在定义变量为整型时,只需指定为int型即可。第七章结构体、共用体和枚举8(2)在声明类型的同时定义变量定义的一般形式如下:struct结构体名{成员表列}变量名表列;例如:structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}student1,student2;7.2结构体类型变量的定义和引用第七章结构体、共用体和枚举97.2结构体类型变量的定义和引用(3)直接定义结构体类型变量其一般形式为:struct{成员表列}变量名表列;即不出现结构体名。•注意:•(1)类型与变量是不同的概念,不要混同。我们只能对变量赋值、存取或运算,而不能对一个类型赋值、存取或运算。在编译时,对类型是不分配空间的,只对变量分配空间。•注意:•(2)对结构体中的成员,可以单独使用,它的作用与地位相当于普通变量。•(3)成员也可以是一个结构体变量。•(4)成员名可以与程序中的变量名相同,二者不代表同一对象。第七章结构体、共用体和枚举107.2结构体类型变量的定义和引用例如:structdate{intmonth;intday;intyear;};structemployee{charname[20];structdatebirthday;chardepartment[30];charaddress[30];longbox;longphone;charemail[30];}employee1,employee2;•图11-3namebirthdaymonthdayyeardepar-tmentaddressboxphone存储示意图email第七章结构体、共用体和枚举117.2.2结构体类型变量的初始化由于结构体类型变量汇集了各类不同数据类型的成员,所以结构体类型变量的初始化就略显复杂。结构体类型变量的定义和初始化为:7.2结构体类型变量的定义和引用structEmployee{charname[20];chardepartment[30];charaddress[30];longbox;longphone;charemail[30];};structEmployeeemployee1={”liping”,”Businessdepartment”,”ChangchunChina”,130000,88547362,”liping@163.com”};第七章结构体、共用体和枚举127.2结构体类型变量的定义和引用说明:1.初始化表达式中给出的常量表达式的个数也可以少于结构体变量的成员变量个数。例如,structEmployeeemployee1={”liping”,”Businessdepartment”};2.可以在初始化列表中给出需要初始化的成员变量的名字,这个时候应该采用“.name=value”的形式。通过给出成员变量的名字,可以以任意的顺序初始化结构体变量的成员,或者只初始化部分成员。例如:structEmployeeemployee1={.name=”liping”,.department=”Businessdepartment”};structEmployeeemployee1={.address=”ChangchunChina”};3.只有在初始化时才可以对结构体变量整体赋值,除此之外只能分别给每个成员赋值。第七章结构体、共用体和枚举137.2.3结构体类型的引用引用结构体变量中成员的方式为:结构体变量名.成员名例如,定义结构体类型及变量如下:structdata{intday;intmonth;intyear;}time1,time2;time1.day表示time1变量中的day成员,即time1的day项。可以对变量的成员赋值,例如:time1.day=10;“.”是成员(分量)运算符,它在所有的运算符中优先级最高,因此可以把time1.day作为一个整体来看待。上面赋值语句的作用是将整数10赋给time1变量中的成员day。7.2结构体类型变量的定义和引用第七章结构体、共用体和枚举14注意:如果成员本身又属一个结构体类型,则要用若干个成员运算符,逐级地找到最低一级的成员。只能对最低级的成员进行赋值或存取以及运算。例如,对定义的结构体变量employee1,可以这样访问各成员:employee1.phoneemployee1.birthday.day7.2结构体类型变量的定义和引用structdate{intmonth;intday;intyear;};structemployee{charname[20];structdatebirthday;chardepartment[30];charaddress[30];longbox;longphone;charemail[30];}employee1,employee2;第七章结构体、共用体和枚举15应遵守以下规则:(1)不能将一个结构体变量作为一个整体进行输入和输出。例如,已定义student1和student2为结构体变量并且它们已有值。不能这样引用:printf(“%d,%s,%c,%d,%f,%s\n”,student1);只能对结构体变量中的各个成员分别进行输入和输出。(2)对结构体变量的成员可以像普通变量一样进行各种运算(根据其类型决定可以进行的运算)。例如:student2.score=student1.score;sum=student1.score+student2.score;student1.age++;++student1.age;(3)可以引用结构体变量成员的地址,也可以引用结构体变量的地址如:scanf(%d“,&student1.num);printf(“%o”,&student1);但不能用以下语句整体读入结构体变量,如:scanf(%d,%s,%c,%d,%f,%s“,&student1);7.2结构体类型变量的定义和引用第七章结构体、共用体和枚举167.2结构体类型变量的定义和引用例7-1:定义结构体类型的变量并输出各成员的值#includestdio.hintmain(){structdate{intday;intmonth;intyear;}today;today.day=8;today.month=8;today.year=2008;printf(”Today’sdateis%d-%d-%d.”,today.year,today.month,today.day);return0;}运行结果如下:Today’sdateis2008-8-8.第七章结构体、共用体和枚举177.4结构体类型数组的定义和使用•一个结构体变量中可以存放一组数据(如一个学生的学号、姓名、成绩等数据)。如果有10个学生的数据需要参加运算,显然应该用数组,这就是结构体数组。结构体数组与以前介绍过的数值型数组不同之处在于每个数组元素都是一个结构体类型的数据,它们又都分别包括各个成员(分量)项。第七章结构体、共用体和枚举18•和定义结构体变量的方法相仿,只需说明其为数组即可。例如:structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};structstudentstu[3];以上定义了一个数组stu,数组有3个元素,均为structstudent类型数据。7.4结构体类型数组的定义和使用第七章结构体、共用体和枚举19也可以直接定义一个结构体数组,例如:structstudent{intnum;…}stu[3];或:strcut{intnum;…}stu[3];7.4结构体类型数组的定义和使用第七章结构体、共用体和枚举20•结构体数组的初始化与其他类型的数组一样,对结构体数组可以初始化。例如:structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu[2]={{10101,″LiLin″,′M′,18,87.5,″103BeijingRoad″},{10102,″ZhangFun″,′M′,19,99,″130ShanghaiRoad“}};7.4结构体类型数组的定义和使用第七章结构体、共用体和枚举21当然,数组的初始化也可以用以下形式:structstudent{intnum;…};structstudentstr[]={{…},{…},{…}};即先声明结构体类型,然后定义数组为该结构体类型,在定义数组时初始化。结构体数组初始化的一般形式是在定义数组的后面加上“={初值表列};”7.4结构体类型数组的定义和使用第七章结构体、共用体和枚举227.4结构体类型数组的定义和使用例7-2:计算学生的平均成绩以及及格的人数#includestdio.h#defineN6intmain(){inti,pass=0;floatav,sum=0.0;structStudentType{intnum;char*name;charsex[6];intage;floatscore;};structStudentTypestudent[N]={{10101,”Zhanghaitao”,”man”,42,9
本文标题:第7章结构体与共用体.
链接地址:https://www.777doc.com/doc-2112086 .html