您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 资本运营 > 第07章结构体共同体和枚举类型
1第七章结构体、共同体和枚举类型2定义:将不同种类型的数据有序地组合在一起,构造出一个新的数据类型,这种形式称为结构体。结构体是多种类型组合的数据类型。3struct结构体名{成员列表};structstudent{intnum;charname[20];charsex;charaddr[30];};结构体名关键字不同数据类型组成的成员分号不能少4定义结构体类型变量的方法一、先定义结构体类型再定义变量名structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};structstudentstudent1,student2;结构体类型名变量1变量2结构体类型只是一种数据类型,不占内存空间,只有定义结构体类型变量时才开辟内存空间。5#defineSTUDENTstructstudentSTUDENT{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};STUDENTstudent1,student2;凡是STUDENT的地方都用structstudent机械替换。6二、在定义类型的同时定义变量structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}student1,student2;struct结构体名{成员列表}变量名列表;紧接着定义变量7三、直接定义结构体类型变量struct{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}student1,student2;struct{成员列表}变量名列表;不出现结构体名。82、在编译时,仅对变量分配空间,不对类型分配空间。1、结构体类型的变量在内存依照其成员的顺序顺序排列,所占内存空间的大小是其全体成员所占空间的总和。3、对结构体中各个成员可以单独引用、赋值,其作用与变量等同。格式:变量名.成员名student1.num94、结构体的成员可以是另一个结构体类型。structdate{intmonth;intday;intyear;};structstudent{intnum;charname[20];structdatebirthday;};成员类型成员名5、成员名可以与程序中的变量名相同,二者分占不同的内存单元,互不干扰。例如,在程序中仍可以定义变量intnum;10结构体类型变量的引用1、不能对结构体变量整体赋值或输出,只能分别对各个成员引用。cinstudent1;cinstudent1.num;student1.num=100;可以将一个结构体变量整体赋给另外一个相同类型的结构体变量。student2=student1;2、嵌套的结构体变量必须逐层引用。student1.birthday.day=25;3、结构体变量中的成员可以同一般变量一样进行运算。student1.birthday.day++;student1.score+=60;错误必须用成员名引用11对局部变量类型的结构体变量初始化voidmain(void){structstudent{longintnum;charname[20];charsex;charaddr[30];}student1={901031,“LiLin”,‘M’,“123BeijingRoad”};coutstudent1.nameendl;输出:LiLin对变量初始化,一一赋值12关于结构类型变量的使用,说明以下几点:1、同类型的结构体变量之间可以直接赋值。这种赋值等同于各个成员的依次赋值。2、结构体变量不能直接进行输入输出,它的每一个成员能否直接进行输入输出,取决于其成员的类型,若是基本类型或是字符数组,则可以直接输入输出。3、结构体变量可以作为函数的参数,函数也可以返回结构体的值。当函数的形参与实参为结构体类型的变量时,这种结合方式属于值调用方式,即属于值传递。(举例说明)13结构体数组结构体数组中的每个元素都是一个结构体类型的变量,其中包括该类型的各个成员。数组各元素在内存中连续存放。14一、结构体数组的定义structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};structstudentstu[30];structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu[30];直接定义15二、结构体数组的初始化structstudent{intnum;charname[20];charsex;}stu[3]={{1011,LiLin,'M'},{1012,WangLan,'F'},{1013,LiuFang,'F'};16structstudent{intnum;charname[20];charsex;}stu[]={{1011,LiLin,'M'},{1012,WangLan,'F'},{1013,LiuFang,'F'}};17以下程序的结果是:voidmain(void){structdate{intyear,month,day;}today;coutsizeof(structdate)endl;}1218根据下面的定义,能打印出字母M的语句是:structperson{charname[9];intage;};structpersonclass[10]={“Jone”,17,“Paul”,19,“Mary”,18,“Adam”,16};A)coutclass[3].nameendl;B)coutclass[3].name[1]endl;C)coutclass[2].name[1]endl;D)coutclass[2].name[0]endl;输出:Adam输出:d输出:a输出:M19结构体类型的静态成员当把结构体类型中的某一个成员的存储类型定义为静态时,表示在这种结构类型的所有变量中,编译程序为这个成员只分配一个存储空间,即这种结构体类型的所有变量共同使用这个成员的存储空间。类型结构体类型名::静态成员名;其中类型要与在结构体中定义该成员的类型一致,结构体类型名指明静态成员属于哪一个结构体。structs{staticintid;inteng;};ints::id=50;这时,未定义结构体变量,但已将静态成员的空间安排好。数据类型结构体类型若有定义:ss1,s2;则变量s1,s2的id成员占用同一存储空间(静态区)。20在结构体中说明的静态成员属于引用性说明,必须在文件作用域中的某一个地方对静态的成员进行定义性说明,且仅能说明一次。ints::id;说明id的初值为0(静态变量的缺省初值均为0)21共用体C++语言中,允许不同的数据类型使用同一存储区域,即同一存储区域由不同类型的变量共同表示。这种数据类型就是共用体。union共用体名{成员表列;}变量表列;uniondata{inti;charch;floatf;}a,b,c;uniondataa,b,c;这几个成员在共用体变量中存放在同一地址,相互覆盖,其长度为最长的成员的长度。22共用体变量的引用不能整体引用共用体变量,只能引用变量中的成员。a.i表示为整型a.ch表示为字符型a.f表示为符点型23共用体变量的特点1、共用体的空间在某一时刻只有一个成员在起作用。2、共用体变量中的成员是最后一次放入的成员。3、共用体变量不能在定义时赋初值。4、共用体变量不能作为函数的参数或函数值,但可使用指向共用体的指针变量。5、共用体可以作为结构的成员,结构体也可以作为共用体的成员。24unionun{inti;doubley;};structst{chara[10];unionunb;};coutsizeof(structst)endl;1825unionun{shortinta;charc[2];}w;w.c[0]=‘A’;w.c[1]=‘a’;coutoctw.aendl;低字节低地址高字节高地址‘a’‘A’w.c[1]w.c[0]2000H2001H输出:0605010110000101000001a65?56?652000H2001H26voidmain(void){unionEXAMPLE{struct{intx,inty;}in;inta,b;}e;e.a=1;e.b=2;e.in.x=e.a*e.a;e.in.y=e.b+e.b;coute.in.x‘\t’e.in.yendl;}inxyabb1248输出:4827枚举类型如果一个变量只有几种可能的值,可以定义为枚举类型。枚举类型就是将变量的值一一列举出来,变量的值仅限于列举出来的值的范围内。28enumweekday{sun,mon,tue,wed,thu,fri,sat};enumweekdayworkday,weekend;workday和weekend值只能是sun到sat其中之一。enum{sun,mon,tue,wed,thu,fri,sat}workday,weekend;其中sun,mon,....,sat称为枚举元素或枚举常量,为用户定义的标识符,所代表的意义由用户决定,在程序中体现出来。数据类型可能取的值变量另一种定义变量的方法291、枚举元素为常量,不可赋值运算。sun=0;mon=1;2、在定义枚举类型的同时,编译程序按顺序给每个枚举元素一个对应的序号,序号从0开始,后续元素依次加1。enumweekday{sun,mon,tue,wed,thu,fri,sat};0,1,2,3,4,5,63、可以在定义时人为指定枚举元素的序号值。enumweekday{sun=9,mon=2,tue,wed,thu,fri,sat};9,2,3,4,5,6,74、只能给枚举变量赋枚举值,若赋序号值必须进行强制类型转换。day=mon;day=1;day=(enumweekday)1;305、枚举元素可以用来进行比较判断。if(workday==mon)if(workdaysun)6、枚举值可以进行加减一个整数n的运算,得到其前后第n个元素的值。workday=sun;workday=(week)(workday+2);workday==tue7、枚举值可以按整型输出其序号值。workday=tue;coutworkday;231voidmain(void){enumteam{qiaut,cubs=4,pick,dodger=qiaut-2;};coutqiaut‘\t’cubs‘\t’;coutpick‘\t’dodgerendl;}输出:045-2
本文标题:第07章结构体共同体和枚举类型
链接地址:https://www.777doc.com/doc-2241277 .html