第三讲结构体1.结构体:ssttrruucctt,,定义的几种形式。成员可以是任意类型。成员引用:结构体变量名.成员名占用内存大小为:各成员占用内存之和。结构体数组:同普通数组一样使用。初始化时注意双重括号。结构体指针:((**pp))..成成员员名名或pp--成成员员名名只能用结构体变量地址赋值,不能赋某成员的地址,如:p=&stu.name;是错误的。通常定义变量或形参时必须加上struct,如:voidfunc(structstudent*p){structstudenta[4],temp;……}2.共用体:union,定义形式同结构体。成员引用:共用体变量名.成员名占用内存大小为:共用体中较长的成员的长度。某一时刻只有一个成员起作用,最后一个存放的成员值有效。结构体类型与共用体类型可互相嵌套使用,即结构体成员的类型也可以是共用体类型,反之亦然。3.枚举类型:如:enumweek{sun,mon,tues,wen,thur,fri,sat}day;枚举元素就是枚举变量的可能取值,如:day=mon;枚举元素视为常量,其值就是序号(0~n-1)。也可以在定义时改变其值,如:enums{a=3,b=1,c=2};4.类型标识符自定义:typedef如:typedefintINTEGER;typedefstruct{……}STU;typedefintARR[10];以后可直接使用INTEGER、ARR、STU类型进行变量定义,书写简略。注意:只能为类型另起新名,不能创造新类型,也不能为变量或函数重新命名(define)。结构体知识点详解11..概概述述CC语语言言的的数数据据类类型型::基基本本类类型型::iinnttcchhaarrffllooaattddoouubbllee指指针针类类型型构构造造类类型型::数数组组、、结结构构体体、、共共用用体体枚枚举举类类型型空空类类型型vvooiidd结结构构体体((ssttrruuccttuurree))是是一一种种数数据据类类型型,,它它把把互互相相联联系系的的数数据据组组合合成成一一个个整整体体。。成成员员可可以以是是不不同同类类型型的的变变量量。。区区别别于于数数组组,,数数组组要要求求每每个个元元素素的的类类型型相相同同。。例例、、一一个个学学生生的的学学号号、、姓姓名名、、性性别别、、年年龄龄、、成成绩绩、、地地址址,,是是互互相相联联系系的的数数据据,,类类型型不不同同,,在在CC语语言言中中用用““结结构构体体((ssttrruuccttuurree))””来来定定义义。。ssttrruuccttssttuuddeenntt{{iinnttnnuumm;;//**学学号号**//cchhaarrnnaammee[[2200]];;//**姓姓名名**//cchhaarrsseexx;;//**性性别别**//iinnttaaggee;;//**年年龄龄**//ffllooaattssccoorree;;//**成成绩绩**//cchhaarraaddddrr[[3300]];;//**地地址址**//}};;22..结结构构体体变变量量的的定定义义结结构构体体是是一一种种数数据据类类型型((像像iinntt、、cchhaarr、、ffllaaoott数数据据类类型型一一样样)),,可可以以用用它它定定义义变变量量。。用用结结构构体体类类型型定定义义变变量量的的方方式式有有三三种种::先先定定义义结结构构体体类类型型,,再再定定义义变变量量例例、、ssttrruuccttssttuuddeenntt{{iinnttnnuumm;;cchhaarrnnaammee[[2200]];;cchhaarrsseexx;;iinnttaaggee;;ffllooaattssccoorree;;cchhaarraaddddrr[[3300]];;}};;ssttrruuccttssttuuddeennttssttuuddeenntt11,,ssttuuddeenntt22;;结结构构体体变变量量中中的的各各成成员员,,在在内内存存中中顺顺序序存存放放。。结结构构体体变变量量所所占占内内存存大大小小用用运运算算符符ssiizzeeooff计计算算。。例例、、pprriinnttff((%%dd%%dd\\nn,,ssiizzeeooff((ssttrruuccttssttuuddeenntt)),,ssiizzeeooff((ssttuuddeenntt11))));;为为了了方方便便,,可可以以这这样样定定义义结结构构体体变变量量::##ddeeffiinneeSSTTUUDDEENNTTssttrruuccttssttuuddeennttSSTTUUDDEENNTT{{iinnttnnuumm;;cchhaarrnnaammee[[2200]];;cchhaarrsseexx;;iinnttaaggee;;ffllooaattssccoorree;;cchhaarraaddddrr[[3300]];;}};;SSTTUUDDEENNTTssttuuddeenntt11,,ssttuuddeenntt22;;在在定定义义类类型型的的同同时时定定义义变变量量ssttrruuccttssttuuddeenntt{{iinnttnnuumm;;cchhaarrnnaammee[[2200]];;cchhaarrsseexx;;iinnttaaggee;;ffllooaattssccoorree;;cchhaarraaddddrr[[3300]];;}}ssttuuddeenntt11,,ssttuuddeenntt22;;直直接接定定义义变变量量ssttrruucctt{{iinnttnnuumm;;cchhaarrnnaammee[[2200]];;cchhaarrsseexx;;iinnttaaggee;;ffllooaattssccoorree;;cchhaarraaddddrr[[3300]];;}}ssttuuddeenntt11,,ssttuuddeenntt22;;成成员员是是另另一一个个结结构构体体变变量量ssttrruuccttddaattee{{iinnttmmoonntthh;;iinnttddaayy;;iinnttyyeeaarr;;}};;ssttrruuccttssttuuddeenntt{{iinnttnnuumm;;cchhaarrnnaammee[[2200]];;cchhaarrsseexx;;iinnttaaggee;;ssttrruuccttddaatteebbiirrtthhddaayy;;cchhaarraaddddrr[[3300]];;}}ssttuuddeenntt11,,ssttuuddeenntt22;;33..结结构构体体变变量量的的引引用用一一般般情情况况下下,,不不能能将将一一个个结结构构体体变变量量作作为为整整体体来来引引用用,,只只能能引引用用其其中中的的成成员员((分分量量))。。引引用用结结构构体体成成员员的的方方式式::结结构构体体变变量量名名..成成员员名名..是是““成成员员运运算算符符””例例11、、pprriinnttff((%%dd,,%%ss,,%%cc,,%%dd,,%%ff,,%%ss,,ssttuuddeenntt11..nnuumm,,ssttuuddeenntt11..nnaammee,,ssttuuddeenntt11..sseexx,,ssttuuddeenntt11..aaggee,,ssttuuddeenntt11..ssccoorree,,ssuuttddeenntt11..aaddddrr));;pprriinnttff((%%dd,,%%ss,,%%cc,,%%dd,,%%ff,,%%ss,,ssttuuddeenntt11));;((错错))例例22、、ssttuuddeenntt22..ssccoorree==ssttuuddeenntt11..ssccoorree;;ssuumm==ssttuuddeenntt11..ssccoorree++ssttuuddeenntt22..ssccoorree;;ssttuuddeenntt11..aaggee++++;;++++ssttuuddeenntt11..aaggee;;例例33、、ssccaannff((%%dd,,&&ssttuuddeenntt11..nnuumm));;当当成成员员是是另另一一个个结结构构体体变变量量时时,,应应一一级级一一级级地地引引用用成成员员。。例例44、、ssttuuddeenntt11..nnuumm;;ssttuuddeenntt11..nnaammee;;ssttuuddeenntt11..bbiirrtthhddaayy..mmoonntthh;;ssttuuddeenntt11..bbiirrtthhddaayy..ddaayy;;ssttuuddeenntt11..bbiirrtthhddaayy..yyeeaarr;;仅仅在在以以下下两两种种情情况况下下,,可可以以把把结结构构体体变变量量作作为为一一个个整整体体来来访访问问。。((11))结结构构体体变变量量整整体体赋赋值值,,例例、、ssttuuddeenntt22==ssttuuddeenntt11;;((22))取取结结构构体体变变量量地地址址,,例例、、pprriinnttff((%%xx,,&&ssttuuddeenntt11));;44..结结构构体体变变量量的的初初始始化化ssttrruuccttssttuuddeenntt{{lloonnggiinnttnnuumm;;cchhaarrnnaammee[[2200]];;cchhaarrsseexx;;cchhaarraaddddrr[[2200]];;}}aa=={{8899003311,,LLiiLLiinn,,''MM'',,112233BBeeiijjiinnggRRooaadd}};;注注意意::不不能能在在结结构构体体内内赋赋初初值值。。例例、、((错错))ssttrruuccttssttuuddeenntt{{lloonnggiinnttnnuumm==8899003311;;cchhaarrnnaammee[[2200]]==LLiiLLiinn;;cchhaarrsseexx==''MM'';;cchhaarraaddddrr[[3300]]==112233BBeejjiinnggRRooaadd;;}}aa;;55..结结构构体体数数组组结结构构体体数数组组的的定定义义ssttrruuccttssttuuddeenntt{{iinnttnnuumm;;cchhaarrnnaammee[[2200]];;cchhaarrsseexx;;iinnttaaggee;;ffllooaattssccoorree;;cchhaarraaddddrr[[3300]];;}};;ssttrruuccttssttuuddeennttssttuu[[33]];;结结构构体体数数组组的的初初始始化化ssttrruuccttssttuuddeenntt{{iinnttnnuumm;;cchhaarrnnaammee[[2200]];;cchhaarrsseexx;;iinnttaaggee;;ffllooaattssccoorree;;cchhaarraaddddrr[[3300]];;}}ssttuu[[33]]=={{{{1100110011,,LLiiLLiinn,,''MM'',,1188,,8877..55,,110033BBeejjiinnggRRooaadd}},,{{1100110022,,ZZhhaannggFFuunn,,''MM'',,1199,,9999,,113300