




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
第九章結(jié)構(gòu)體與共用體9.1結(jié)構(gòu)體結(jié)構(gòu)體是一種構(gòu)造數(shù)據(jù)類型用途:把不同類型的數(shù)據(jù)組合成一個整體-------自定義數(shù)據(jù)類型結(jié)構(gòu)體類型定義struct[結(jié)構(gòu)體名]{
類型標識符成員名;類型標識符成員名;
…………….};成員類型可以是基本型或構(gòu)造型struct是關(guān)鍵字,不能省略合法標識符可省:無名結(jié)構(gòu)體Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.第九章結(jié)構(gòu)體與共用體9.1結(jié)構(gòu)體struct例struct
student{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};namenumsexagescoreaddr2字節(jié)2字節(jié)20字節(jié)1字節(jié)4字節(jié)30字節(jié)……..結(jié)構(gòu)體類型定義描述結(jié)構(gòu)的組織形式,不分配內(nèi)存結(jié)構(gòu)體類型定義的作用域Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.例structstudentnamenumse例structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};
structstudentstu1,stu2;9.2結(jié)構(gòu)體變量的定義先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體變量一般形式:struct結(jié)構(gòu)體名{
類型標識符成員名;類型標識符成員名;
…………….};struct結(jié)構(gòu)體名變量名表列;例#defineSTUDENTstructstudent
STUDENT{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};
STUDENTstu1,stu2;Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.例structstudent9.2結(jié)構(gòu)體變量定義結(jié)構(gòu)體類型的同時定義結(jié)構(gòu)體變量一般形式:struct結(jié)構(gòu)體名{
類型標識符成員名;類型標識符成員名;
…………….}變量名表列;例structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.定義結(jié)構(gòu)體類型的同時定義結(jié)構(gòu)體變量struct結(jié)構(gòu)直接定義結(jié)構(gòu)體變量一般形式:struct{
類型標識符成員名;類型標識符成員名;
…………….}變量名表列;例struct{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;用無名結(jié)構(gòu)體直接定義變量只能一次Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.直接定義結(jié)構(gòu)體變量struct例struct用無名說明結(jié)構(gòu)體類型與結(jié)構(gòu)體變量概念不同類型:不分配內(nèi)存;變量:分配內(nèi)存類型:不能賦值、存取、運算;變量:可以結(jié)構(gòu)體可嵌套結(jié)構(gòu)體成員名與程序中變量名可相同,不會混淆結(jié)構(gòu)體類型及變量的作用域與生存期例structdate{intmonth;intday;intyear;};structstudent{intnum;charname[20];
structdatebirthday;}stu;numnamebirthdaymonthdayyear例structstudent{intnum;charname[20];
structdate{intmonth;intday;intyear;}birthday;}stu;numnamebirthdaymonthdayyearEvaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.說明例structdatenumnamebirthda9.3結(jié)構(gòu)體變量的引用引用規(guī)則結(jié)構(gòu)體變量不能整體引用,只能引用變量成員可以將一個結(jié)構(gòu)體變量賦值給另一個結(jié)構(gòu)體變量結(jié)構(gòu)體嵌套時逐級引用成員(分量)運算符優(yōu)先級:1結(jié)合性:從左向右引用方式:結(jié)構(gòu)體變量名.成員名例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;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;printf(“%d,%s,%c,%d,%f,%s\n”,stu1);()stu1={101,“WanLin”,‘M’,19,87.5,“DaLian”};()例structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;stu2=stu1;()例structstudent{intnum;charname[20];structdate{intmonth;intday;intyear;}birthday;}stu1,stu2;numnamebirthdaymonthdayyearstu1.birthday.month=12;例structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;if(stu1==stu2)……..()Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.9.3結(jié)構(gòu)體變量的引用可以將一個結(jié)構(gòu)體變量賦值給另一個結(jié)構(gòu)9.4結(jié)構(gòu)體變量的初始化形式一:struct結(jié)構(gòu)體名{
類型標識符成員名;類型標識符成員名;
…………….};struct結(jié)構(gòu)體名結(jié)構(gòu)體變量={初始數(shù)據(jù)};例structstudent{intnum;charname[20];charsex;intage;charaddr[30];};structstudentstu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.9.4結(jié)構(gòu)體變量的初始化struct結(jié)構(gòu)體名例形式二:struct結(jié)構(gòu)體名{
類型標識符成員名;類型標識符成員名;
…………….}結(jié)構(gòu)體變量={初始數(shù)據(jù)};例structstudent{intnum;charname[20];charsex;intage;charaddr[30];}stu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.形式二:struct結(jié)構(gòu)體名例struct形式三:struct{
類型標識符成員名;類型標識符成員名;
…………….}結(jié)構(gòu)體變量={初始數(shù)據(jù)};例struct{intnum;charname[20];charsex;intage;charaddr[30];}stu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.形式三:struct例structEvaluatio9.5結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組的定義三種形式:形式一:
structstudent{intnum;charname[20];charsex;intage;};structstudentstu[2];形式二:structstudent{intnum;charname[20];charsex;intage;}stu[2];形式三:struct{intnum;charname[20];charsex;intage;}stu[2];numnamesexagenumnamesexagestu[0]stu[1]25BEvaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.9.5結(jié)構(gòu)體數(shù)組形式一:形式二:形式三:numname結(jié)構(gòu)體數(shù)組初始化例struct{intnum;charname[20];charsex;intage;}stu[]={{……},{……},{……}};順序初始化:structstudent{intnum;charname[20];charsex;intage;};structstudentstu[]={100,“WangLin”,‘M’,20,101,“LiGang”,‘M’,19,110,“LiuYan”,‘F’,19};例structstudent{intnum;charname[20];charsex;intage;}stu[]={{……},{……},{……}};分行初始化:structstudent{intnum;charname[20];charsex;intage;};structstudentstu[]={{100,“WangLin”,‘M’,20},{101,“LiGang”,‘M’,19},{110,“LiuYan”,‘F’,19}};全部初始化時維數(shù)可省結(jié)構(gòu)體數(shù)組引用引用方式:結(jié)構(gòu)體數(shù)組名[下標].成員名structstudent{intnum;charname[20];charsex;intage;}str[3];stu[1].age++;strcpy(stu[0].name,”ZhaoDa”);Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.結(jié)構(gòu)體數(shù)組初始化例struct順序初始化:例str例統(tǒng)計后選人選票structperson{charname[20];intcount;}leader[3]={“Li”,0,“Zhang”,0,”Wang“,0};main(){inti,j;charleader_name[20];
for(i=1;i<=10;i++){scanf("%s",leader_name);
for(j=0;j<3;j++) if(strcmp(leader_name,leader[j].name)==0) leader[j].count++;}for(i=0;i<3;i++)printf("%5s:%d\n",leader[i].name,leader[i].count);}namecountLiZhangWang000Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.例統(tǒng)計后選人選票structpersonnamecou9.6結(jié)構(gòu)體和指針指向結(jié)構(gòu)體變量的指針定義形式:struct結(jié)構(gòu)體名*結(jié)構(gòu)體指針名;例structstudent*p;使用結(jié)構(gòu)體指針變量引用成員形式存放結(jié)構(gòu)體變量在內(nèi)存的起始地址numnamesexagestupstructstudent{intnum;charname[20];charsex;intage;}stu;structstudent*p=&stu;(*結(jié)構(gòu)體指針名).成員名結(jié)構(gòu)體指針名->成員名結(jié)構(gòu)體變量名.成員名指向運算符優(yōu)先級:1結(jié)合方向:從左向右例指向結(jié)構(gòu)體的指針變量main(){structstudent{longintnum; charname[20]; charsex; floatscore;}stu_1,*p;p=&stu_1;stu_1.num=89101;strcpy(stu_1.name,"LiLin");
p->sex='M';p->score=89.5;printf("\nNo:%ld\nname:%s\nsex:%c\nscore:%f\n",
(*p).num,p->name,stu_1.sex,p->score);}例intn;int*p=&n;
*p=10;n=10structstudentstu1;structstudent*p=&stu1;stu1.num=101;(*p).num=101Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.9.6結(jié)構(gòu)體和指針使用結(jié)構(gòu)體指針變量引用成員形式存放結(jié)構(gòu)體指向結(jié)構(gòu)體數(shù)組的指針例指向結(jié)構(gòu)體數(shù)組的指針structstudent{intnum;charname[20];charsex;intage;}stu[3]={{10101,"LiLin",'M',18},{10102,"ZhangFun",'M',19}, {10104,"WangMin",'F',20}};main(){structstudent*p;for(p=stu;p<stu+3;p++)printf("%d%s%c%d\n",p->num,p->name,p->sex,p->age);}numnamesexagestu[0]pstu[1]stu[2]p+1Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.指向結(jié)構(gòu)體數(shù)組的指針例指向結(jié)構(gòu)體數(shù)組的指針struct用指向結(jié)構(gòu)體的指針作函數(shù)參數(shù)用結(jié)構(gòu)體變量的成員作參數(shù)----值傳遞用指向結(jié)構(gòu)體變量或數(shù)組的指針作參數(shù)----地址傳遞用結(jié)構(gòu)體變量作參數(shù)----多值傳遞,效率低Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.用指向結(jié)構(gòu)體的指針作函數(shù)參數(shù)Evaluationonly.structdata{inta,b,c;};main(){voidfunc(structdata);structdataarg;arg.a=27;arg.b=3;arg.c=arg.a+arg.b;printf("arg.a=%darg.b=%darg.c=%d\n",arg.a,arg.b,arg.c);printf("CallFunc()....\n");
func(arg);printf("arg.a=%darg.b=%darg.c=%d\n",arg.a,arg.b,arg.c);}voidfunc(structdataparm){printf("parm.a=%dparm.b=%dparm.c=%d\n",parm.a,parm.b,parm.c);printf("Process...\n");parm.a=18;parm.b=5;parm.c=parm.a*parm.b;printf("parm.a=%dparm.b=%dparm.c=%d\n",parm.a,parm.b,parm.c);printf("Return...\n");}arga:27b:3c:30(main)(func)parma:27b:3c:30copyarga:27b:3c:30(main)(func)parma:18b:5c:90arga:27b:3c:30(main)arga:27b:3c:30(main)例用結(jié)構(gòu)體變量作函數(shù)參數(shù)Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.structdataarga:27b:3c:30(mstructdata{inta,b,c;};main(){voidfunc(structdata*parm);structdataarg;arg.a=27;arg.b=3;arg.c=arg.a+arg.b;printf("arg.a=%darg.b=%darg.c=%d\n",arg.a,arg.b,arg.c);printf("CallFunc()....\n");
func(&arg);printf("arg.a=%darg.b=%darg.c=%d\n",arg.a,arg.b,arg.c);}voidfunc(structdata*parm){printf("parm->a=%dparm->b=%dparm->c=%d\n",parm->a,parm->b,parm->c);printf("Process...\n");parm->a=18;parm->b=5;parm->c=parm->a*parm->b;printf("parm->a=%dparm->b=%dparm->c=%d\n",parm->a,parm->b,parm->c);printf("Return...\n");}arga:18b:5c:90(main)arga:27b:3c:30(main)例用結(jié)構(gòu)體指針變量作函數(shù)參數(shù)arga:27b:3c:30(main)(func)parm****arga:18b:5c:90(main)(func)parm****Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.structdataarga:18b:5c:90(m9.8共用體構(gòu)造數(shù)據(jù)類型,也叫聯(lián)合體用途:使幾個不同類型的變量共占一段內(nèi)存(相互覆蓋)共用體類型定義定義形式:union共用體名{
類型標識符成員名;類型標識符成員名;
…………….};例uniondata{inti;charch;floatf;};fchi類型定義不分配內(nèi)存Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.9.8共用體union共用體名例uniond形式一:uniondata{inti;charch;floatf;}a,b;形式二:uniondata{inti;charch;floatf;};uniondataa,b,c,*p,d[3];形式三:union{inti;charch;floatf;}a,b,c;共用體變量的定義fchifchiab共用體變量定義分配內(nèi)存,長度=最長成員所占字節(jié)數(shù)共用體變量任何時刻只有一個成員存在Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.形式一:形式二:形式三:共用體變量的定義fchifchiab共用體變量引用引用方式:例a.i=1;a.ch=‘a(chǎn)’;a.f=1.5;printf(“%d”,a.i);(編譯通過,運行結(jié)果不對)
引用規(guī)則不能引用共用體變量,只能引用其成員共用體指針名->成員名共用體變量名.成員名(*共用體指針名).成員名uniondata{inti;charch;floatf;};uniondataa,b,c,*p,d[3];a.ia.cha.fp->ip->chp->f(*p).i(*p).ch(*p).fd[0].id[0].chd[0].f共用體變量中起作用的成員是最后一次存放的成員例union{inti;charch;floatf;}a;a=1;()
不能在定義共用體變量時初始化例union{inti;charch;floatf;}a={1,’a’,1.5};()
可以用一個共用體變量為另一個變量賦值例floatx;union{inti;charch;floatf;}a,b;a.i=1;a.ch=‘a(chǎn)’;a.f=1.5;b=a;()x=a.f;()Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.共用體變量引用例a.i=1;引用規(guī)則共用體指針名->成例將一個整數(shù)按字節(jié)輸出0110000101000001低字節(jié)高字節(jié)0100000101100001ch[0]ch[1]運行結(jié)果:i=60501ch0=101,ch1=141ch0=A,ch1=amain(){unionint_char{inti;charch[2];}x;x.i=24897;printf("i=%o\n",x.i);printf("ch0=%o,ch1=%o\nch0=%c,ch1=%c\n", x.ch[0],x.ch[1],x.ch[0],x.ch[1]);}Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.例將一個整數(shù)按字節(jié)輸出011000010100000結(jié)構(gòu)體與共用體區(qū)別:存儲方式不同structnode{charch[2];intk;}a;unionnode{charch[2];intk;}b;achkbchk變量的各成員同時存在任一時刻只有一個成員存在聯(lián)系:兩者可相互嵌套Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.結(jié)構(gòu)體與共用體structnodeunionno例結(jié)構(gòu)體中嵌套共用體namenumsexjobclasspositionLiWang10112086FMST501prof循環(huán)n次讀入姓名、號碼、性別、職務job==‘s’真真假假讀入class讀入position輸出“輸入錯”循環(huán)n次job==‘s’真假輸出:姓名,號碼,性別,職業(yè),班級輸出:姓名,號碼,性別,職業(yè),職務job==‘t’struct{intnum;charname[10];charsex;charjob;
union{intclass;charposition[10];}category;}person[2];Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.例結(jié)構(gòu)體中嵌套共用體namenumsexjobcla例共用體中嵌套結(jié)構(gòu)體,機器字數(shù)據(jù)與字節(jié)數(shù)據(jù)的處理0001001000110100低字節(jié)高字節(jié)0011010000010010lowhigh0x12340001001011111111低字節(jié)高字節(jié)1111111100010010lowhigh0x12ffstructw_tag{charlow;charhigh;};unionu_tag{structw_tagbyte_acc;intword_acc;}u_acc;word_accbyte_acc.lowbyte_acc.highu_accEvaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.例共用體中嵌套結(jié)構(gòu)體,機器字數(shù)據(jù)與字節(jié)數(shù)據(jù)的處理00019.10用typedef定義類型功能:用自定義名字為已有數(shù)據(jù)類型命名類型定義簡單形式:typedeftype
name;例typedefintINTEGER;類型定義語句關(guān)鍵字已有數(shù)據(jù)類型名用戶定義的類型名例typedeffloatREAL;類型定義后,與已有類型一樣使用例INTEGERa,b,c;REALf1,f2;inta,b,c;floatf1,f2;說明:1.typedef沒有創(chuàng)造新數(shù)據(jù)類型2.typedef是定義類型,不能定義變量3.typedef與define不同
define
typedef預編譯時處理
編譯時處理簡單字符置換
為已有類型命名Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.9.10用typedef定義類型例typedefitypedef定義類型步驟按定義變量方法先寫出定義體如inti;將變量名換成新類型名如intINTEGER;最前面加typedef如typedefintINTEGER;用新類型名定義變量如INTEGERi,j;例定義數(shù)組類型inta[100];intARRAY[100];typedefintARRAY[100];ARRAYa,b,c;inta[100],b[100],c[100];例定義指針類型char*str;char*STRING;typedefchar*STRING;STRINGp,s[10];char*p;
char*s[10];例定義函數(shù)指針類型int(*p)();int(*POWER)();typedefint(*POWER)();POWERp1,p2;int(*p1)(),(*p2)();例定義結(jié)構(gòu)體類型structdate{intmonth;intday;intyear;}d;例定義結(jié)構(gòu)體類型structdate{intmonth;intday;intyear;}DATE;例定義結(jié)構(gòu)體類型typedefstructdate{intmonth;intday;intyear;}DATE;例定義結(jié)構(gòu)體類型DATEbirthday,*p;structdate{intmonth;intday;intyear;}birthday,*p;類型定義可嵌套例typedefstructclub{charname[20];intsize;intyear;}GROUP;typedefGROUP*PG;PGpclub;GROUP*pclub;structclub*pclub;GROUP為結(jié)構(gòu)體類型PG為指向GROUP的指針類型Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.typedef定義類型步驟例定義數(shù)組類型int第九章結(jié)構(gòu)體與共用體9.1結(jié)構(gòu)體結(jié)構(gòu)體是一種構(gòu)造數(shù)據(jù)類型用途:把不同類型的數(shù)據(jù)組合成一個整體-------自定義數(shù)據(jù)類型結(jié)構(gòu)體類型定義struct[結(jié)構(gòu)體名]{
類型標識符成員名;類型標識符成員名;
…………….};成員類型可以是基本型或構(gòu)造型struct是關(guān)鍵字,不能省略合法標識符可省:無名結(jié)構(gòu)體Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.第九章結(jié)構(gòu)體與共用體9.1結(jié)構(gòu)體struct例struct
student{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};namenumsexagescoreaddr2字節(jié)2字節(jié)20字節(jié)1字節(jié)4字節(jié)30字節(jié)……..結(jié)構(gòu)體類型定義描述結(jié)構(gòu)的組織形式,不分配內(nèi)存結(jié)構(gòu)體類型定義的作用域Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.例structstudentnamenumse例structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};
structstudentstu1,stu2;9.2結(jié)構(gòu)體變量的定義先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體變量一般形式:struct結(jié)構(gòu)體名{
類型標識符成員名;類型標識符成員名;
…………….};struct結(jié)構(gòu)體名變量名表列;例#defineSTUDENTstructstudent
STUDENT{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};
STUDENTstu1,stu2;Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.例structstudent9.2結(jié)構(gòu)體變量定義結(jié)構(gòu)體類型的同時定義結(jié)構(gòu)體變量一般形式:struct結(jié)構(gòu)體名{
類型標識符成員名;類型標識符成員名;
…………….}變量名表列;例structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.定義結(jié)構(gòu)體類型的同時定義結(jié)構(gòu)體變量struct結(jié)構(gòu)直接定義結(jié)構(gòu)體變量一般形式:struct{
類型標識符成員名;類型標識符成員名;
…………….}變量名表列;例struct{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;用無名結(jié)構(gòu)體直接定義變量只能一次Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.直接定義結(jié)構(gòu)體變量struct例struct用無名說明結(jié)構(gòu)體類型與結(jié)構(gòu)體變量概念不同類型:不分配內(nèi)存;變量:分配內(nèi)存類型:不能賦值、存取、運算;變量:可以結(jié)構(gòu)體可嵌套結(jié)構(gòu)體成員名與程序中變量名可相同,不會混淆結(jié)構(gòu)體類型及變量的作用域與生存期例structdate{intmonth;intday;intyear;};structstudent{intnum;charname[20];
structdatebirthday;}stu;numnamebirthdaymonthdayyear例structstudent{intnum;charname[20];
structdate{intmonth;intday;intyear;}birthday;}stu;numnamebirthdaymonthdayyearEvaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.說明例structdatenumnamebirthda9.3結(jié)構(gòu)體變量的引用引用規(guī)則結(jié)構(gòu)體變量不能整體引用,只能引用變量成員可以將一個結(jié)構(gòu)體變量賦值給另一個結(jié)構(gòu)體變量結(jié)構(gòu)體嵌套時逐級引用成員(分量)運算符優(yōu)先級:1結(jié)合性:從左向右引用方式:結(jié)構(gòu)體變量名.成員名例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;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;printf(“%d,%s,%c,%d,%f,%s\n”,stu1);()stu1={101,“WanLin”,‘M’,19,87.5,“DaLian”};()例structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;stu2=stu1;()例structstudent{intnum;charname[20];structdate{intmonth;intday;intyear;}birthday;}stu1,stu2;numnamebirthdaymonthdayyearstu1.birthday.month=12;例structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;if(stu1==stu2)……..()Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.9.3結(jié)構(gòu)體變量的引用可以將一個結(jié)構(gòu)體變量賦值給另一個結(jié)構(gòu)9.4結(jié)構(gòu)體變量的初始化形式一:struct結(jié)構(gòu)體名{
類型標識符成員名;類型標識符成員名;
…………….};struct結(jié)構(gòu)體名結(jié)構(gòu)體變量={初始數(shù)據(jù)};例structstudent{intnum;charname[20];charsex;intage;charaddr[30];};structstudentstu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.9.4結(jié)構(gòu)體變量的初始化struct結(jié)構(gòu)體名例形式二:struct結(jié)構(gòu)體名{
類型標識符成員名;類型標識符成員名;
…………….}結(jié)構(gòu)體變量={初始數(shù)據(jù)};例structstudent{intnum;charname[20];charsex;intage;charaddr[30];}stu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.形式二:struct結(jié)構(gòu)體名例struct形式三:struct{
類型標識符成員名;類型標識符成員名;
…………….}結(jié)構(gòu)體變量={初始數(shù)據(jù)};例struct{intnum;charname[20];charsex;intage;charaddr[30];}stu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.形式三:struct例structEvaluatio9.5結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組的定義三種形式:形式一:
structstudent{intnum;charname[20];charsex;intage;};structstudentstu[2];形式二:structstudent{intnum;charname[20];charsex;intage;}stu[2];形式三:struct{intnum;charname[20];charsex;intage;}stu[2];numnamesexagenumnamesexagestu[0]stu[1]25BEvaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.9.5結(jié)構(gòu)體數(shù)組形式一:形式二:形式三:numname結(jié)構(gòu)體數(shù)組初始化例struct{intnum;charname[20];charsex;intage;}stu[]={{……},{……},{……}};順序初始化:structstudent{intnum;charname[20];charsex;intage;};structstudentstu[]={100,“WangLin”,‘M’,20,101,“LiGang”,‘M’,19,110,“LiuYan”,‘F’,19};例structstudent{intnum;charname[20];charsex;intage;}stu[]={{……},{……},{……}};分行初始化:structstudent{intnum;charname[20];charsex;intage;};structstudentstu[]={{100,“WangLin”,‘M’,20},{101,“LiGang”,‘M’,19},{110,“LiuYan”,‘F’,19}};全部初始化時維數(shù)可省結(jié)構(gòu)體數(shù)組引用引用方式:結(jié)構(gòu)體數(shù)組名[下標].成員名structstudent{intnum;charname[20];charsex;intage;}str[3];stu[1].age++;strcpy(stu[0].name,”ZhaoDa”);Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.結(jié)構(gòu)體數(shù)組初始化例struct順序初始化:例str例統(tǒng)計后選人選票structperson{charname[20];intcount;}leader[3]={“Li”,0,“Zhang”,0,”Wang“,0};main(){inti,j;charleader_name[20];
for(i=1;i<=10;i++){scanf("%s",leader_name);
for(j=0;j<3;j++) if(strcmp(leader_name,leader[j].name)==0) leader[j].count++;}for(i=0;i<3;i++)printf("%5s:%d\n",leader[i].name,leader[i].count);}namecountLiZhangWang000Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile.Copyright2004-2011AsposePtyLtd.例統(tǒng)計后選人選票structpersonnamecou9.6結(jié)構(gòu)體和指針指向結(jié)構(gòu)體變量的指針定義形式:struct結(jié)構(gòu)體名*結(jié)構(gòu)體指針名;例structstudent*p;使用
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度物流企業(yè)與貨車司機車輛保險及賠償合同
- 2025年度電網(wǎng)工程結(jié)算付款合同
- 二零二五年度金融行業(yè)職員職業(yè)傷害及工傷賠償協(xié)議書
- 二零二五年度培訓機構(gòu)教育培訓項目投資協(xié)議
- 二零二五年度高端別墅房源代理合作協(xié)議
- 二零二五年度房產(chǎn)轉(zhuǎn)讓合同中的特殊條款及附加條件協(xié)議
- 2025年度高空作業(yè)聘用司機安全協(xié)議及高空作業(yè)規(guī)范合同
- 2025年度銀行與互聯(lián)網(wǎng)企業(yè)創(chuàng)新業(yè)務合作協(xié)議
- 2025年度智能數(shù)據(jù)分析技術(shù)服務費合同范文
- 運動會 開幕式發(fā)言稿
- 2025年萍鄉(xiāng)衛(wèi)生職業(yè)學院單招職業(yè)傾向性測試題庫審定版
- 《出納理論與實務》課件-課程標準《出納理論與實務》
- 【高考真題(含答案)】浙江省2024年1月普通高校招生選考化學試題(含答案)
- 電風暴護理查房
- 人教版四年級數(shù)學下冊《圖形的運動(二)》試題(含答案)
- 2024-2025學年五年級(下)信息科技教學計劃
- 2025年中國鑄造行業(yè)市場前景預測及投資方向研究報告
- 《老年人權(quán)益保障法》
- 2025屆上海市(春秋考)高考英語考綱詞匯對照表清單
- 2025-2030年中國pcb行業(yè)競爭格局及未來投資趨勢分析報告新版
- CNAS-SC175:2024 基于ISO IEC 2000-1的服務管理體系認證機構(gòu)認可方案
評論
0/150
提交評論