版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
結(jié)構(gòu)體共用體和用戶(hù)定義類(lèi)型演示文稿現(xiàn)在是1頁(yè)\一共有32頁(yè)\編輯于星期日(優(yōu)選)結(jié)構(gòu)體共用體和用戶(hù)定義類(lèi)型現(xiàn)在是2頁(yè)\一共有32頁(yè)\編輯于星期日說(shuō)明:1.typedef沒(méi)有創(chuàng)造新數(shù)據(jù)類(lèi)型2.typedef是定義類(lèi)型,不能定義變量3.typedef與define
不同definetypedef預(yù)編譯時(shí)處理編譯時(shí)處理簡(jiǎn)單字符置換
為已有類(lèi)型命名現(xiàn)在是3頁(yè)\一共有32頁(yè)\編輯于星期日結(jié)構(gòu)體:是一種自定義的構(gòu)造數(shù)據(jù)類(lèi)型。用途:把不同類(lèi)型的數(shù)據(jù)組合成一個(gè)整體。struct
[結(jié)構(gòu)體名]{
類(lèi)型標(biāo)識(shí)符成員名;類(lèi)型標(biāo)識(shí)符成員名;…………….};成員類(lèi)型可以是基本型或構(gòu)造型struct是關(guān)鍵字,不能省略合法標(biāo)識(shí)符可省:無(wú)名結(jié)構(gòu)體13.2.1結(jié)構(gòu)體類(lèi)型定義:13.2結(jié)構(gòu)體現(xiàn)在是4頁(yè)\一共有32頁(yè)\編輯于星期日例
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)體類(lèi)型定義描述結(jié)構(gòu)的組織形式(圖紙),不分配內(nèi)存結(jié)構(gòu)體類(lèi)型的定義現(xiàn)在是5頁(yè)\一共有32頁(yè)\編輯于星期日例structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};
structstudentstu1,stu2;13.2.2結(jié)構(gòu)體變量的定義(1)、先定義結(jié)構(gòu)體類(lèi)型,再定義結(jié)構(gòu)體變量一般形式:
struct結(jié)構(gòu)體名{類(lèi)型標(biāo)識(shí)符成員名;類(lèi)型標(biāo)識(shí)符成員名;…………….};struct結(jié)構(gòu)體名
變量名表列;例#defineSTUDENTstructstudent
STUDENT{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};
STUDENTstu1,stu2;現(xiàn)在是6頁(yè)\一共有32頁(yè)\編輯于星期日(2)、定義結(jié)構(gòu)體類(lèi)型的同時(shí)定義結(jié)構(gòu)體變量一般形式:struct結(jié)構(gòu)體名{
類(lèi)型標(biāo)識(shí)符成員名;類(lèi)型標(biāo)識(shí)符成員名;
…………….}變量名表列;例structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;現(xiàn)在是7頁(yè)\一共有32頁(yè)\編輯于星期日(3)、直接無(wú)名結(jié)構(gòu)體的同時(shí)定義結(jié)構(gòu)體變量一般形式:struct{
類(lèi)型標(biāo)識(shí)符成員名;類(lèi)型標(biāo)識(shí)符成員名;
…………….}變量名列表;例struct{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;用無(wú)名結(jié)構(gòu)體直接定義變量只能一次通常用在不需要再次定義此類(lèi)型結(jié)構(gòu)變量現(xiàn)在是8頁(yè)\一共有32頁(yè)\編輯于星期日(4)、使用typedef說(shuō)明一個(gè)結(jié)構(gòu)體類(lèi)型名,再用新類(lèi)型名定義變量一般形式:typedefstruct{
類(lèi)型標(biāo)識(shí)符成員名;類(lèi)型標(biāo)識(shí)符成員名;
…………….}標(biāo)識(shí)符;標(biāo)識(shí)符變量名列表;例typedefstruct{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}student;studentstd,pers[3],*pstd;現(xiàn)在是9頁(yè)\一共有32頁(yè)\編輯于星期日說(shuō)明結(jié)構(gòu)體類(lèi)型與結(jié)構(gòu)體變量概念不同類(lèi)型:不分配內(nèi)存;變量:分配內(nèi)存類(lèi)型:不能賦值、存取、運(yùn)算;變量:可以結(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;numnamebirthdaymonthdayyear現(xiàn)在是10頁(yè)\一共有32頁(yè)\編輯于星期日
12.2.3結(jié)構(gòu)體變量的初始化和其他類(lèi)型的變量相同,在定義結(jié)構(gòu)體變量時(shí)賦初值形式一:struct結(jié)構(gòu)體名{類(lèi)型標(biāo)識(shí)符成員名;類(lèi)型標(biāo)識(shí)符成員名;…………….};struct結(jié)構(gòu)體名結(jié)構(gòu)體變量={初始數(shù)據(jù)};例structstudent{intnum;charname[20];charsex;intage;charaddr[30];};structstudentstu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};現(xiàn)在是11頁(yè)\一共有32頁(yè)\編輯于星期日形式二:struct結(jié)構(gòu)體名{類(lèi)型標(biāo)識(shí)符成員名;類(lèi)型標(biāo)識(shí)符成員名;
…………….}結(jié)構(gòu)體變量={初始數(shù)據(jù)};例structstudent{intnum;charname[20];charsex;intage;charaddr[30];}stu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};現(xiàn)在是12頁(yè)\一共有32頁(yè)\編輯于星期日形式三:struct{
類(lèi)型標(biāo)識(shí)符成員名;類(lèi)型標(biāo)識(shí)符成員名;…………….}結(jié)構(gòu)體變量={初始數(shù)據(jù)};例struct{intnum;charname[20];charsex;intage;charaddr[30];}stu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};現(xiàn)在是13頁(yè)\一共有32頁(yè)\編輯于星期日12.2.4
結(jié)構(gòu)體變量的引用引用規(guī)則結(jié)構(gòu)體變量不能整體引用,只能引用變量成員可以將一個(gè)結(jié)構(gòu)體變量賦值給另一個(gè)結(jié)構(gòu)體變量結(jié)構(gòu)體嵌套時(shí)逐級(jí)引用成員(分量)運(yùn)算符優(yōu)先級(jí):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)……..()現(xiàn)在是14頁(yè)\一共有32頁(yè)\編輯于星期日12.2.5結(jié)構(gòu)體數(shù)組1、結(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]25B現(xiàn)在是15頁(yè)\一共有32頁(yè)\編輯于星期日初始化:與其他類(lèi)型的數(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;};structstudentstu[]={{100,“WangLin”,‘M’,20},{101,“LiGang”,‘M’,19},{110,“LiuYan”,‘F’,19}};全部初始化時(shí)維數(shù)可省現(xiàn)在是16頁(yè)\一共有32頁(yè)\編輯于星期日2、結(jié)構(gòu)體數(shù)組引用引用方式:結(jié)構(gòu)體數(shù)組名[下標(biāo)].成員名stu[1].age++;structstudent{intnum;charname[20];charsex;intage;}str[3];strcpy(stu[0].name,”ZhaoDa”);numnamesexagenumnamesexagestu[0]stu[1]25B現(xiàn)在是17頁(yè)\一共有32頁(yè)\編輯于星期日12.2.6向函數(shù)傳遞結(jié)構(gòu)體型數(shù)據(jù)
函數(shù)之間的參數(shù)傳遞也可以是結(jié)構(gòu)體型數(shù)據(jù),既可以通過(guò)參數(shù)傳送結(jié)構(gòu)體變量的成員,也可以通過(guò)參數(shù)傳遞整個(gè)結(jié)構(gòu)體變量。1.向函數(shù)傳遞結(jié)構(gòu)體變量的成員若結(jié)構(gòu)體變量的成員是基本類(lèi)型,則作函數(shù)的實(shí)參時(shí)的用法與普通變量作函數(shù)的實(shí)參的用法相同,形參與實(shí)參之間仍然是“值傳遞”的方式。2.向函數(shù)傳遞結(jié)構(gòu)體變量
ANSIC允許函數(shù)之間傳遞結(jié)構(gòu)體變量。若實(shí)參是結(jié)構(gòu)體變量,那么形參也應(yīng)是同類(lèi)型的結(jié)構(gòu)體變量。系統(tǒng)將為結(jié)構(gòu)體類(lèi)型的形參開(kāi)辟相應(yīng)的存儲(chǔ)單元,并將實(shí)參中各成員的值賦給對(duì)應(yīng)的形參成員?!爸祩鬟f”現(xiàn)在是18頁(yè)\一共有32頁(yè)\編輯于星期日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ù)現(xiàn)在是19頁(yè)\一共有32頁(yè)\編輯于星期日3.傳遞結(jié)構(gòu)體的地址結(jié)構(gòu)體變量的地址作為實(shí)參傳遞,那么形參應(yīng)是基類(lèi)型相同的結(jié)構(gòu)體類(lèi)型的指針。系統(tǒng)將為結(jié)構(gòu)體類(lèi)型指針開(kāi)辟一個(gè)存儲(chǔ)單元,存放實(shí)參結(jié)構(gòu)體變量的地址值。“地址傳遞”
typedefstruct{chars[10];intt;}ST;getdata(ST*p){scanf(“%s%d”,p->s,&p->t)}main(){STa;getdata(a);printf(“%s,%d”,a.s,a.t);}
現(xiàn)在是20頁(yè)\一共有32頁(yè)\編輯于星期日12.2.7結(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ùn)算符優(yōu)先級(jí):1結(jié)合方向:從左向右例指向結(jié)構(gòu)體的指針變量typedefstructstudent{longintnum;charname[20];charsex;floatscore;}ST;main(){STstu_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=101現(xiàn)在是21頁(yè)\一共有32頁(yè)\編輯于星期日注意:若有:struct{inta;char*s;}x,*p=&x;變量x的成員a,指針成員s已正確賦值(*p).a等價(jià)于p->a++p->a;等價(jià)于++(p->a);p所指變量x中成員a增1(p++)->a;等價(jià)于p++->a;訪問(wèn)p所指變量x中成員a之后,指針p增1。*p->s引用變量x中s所指存儲(chǔ)單元*p->s++引用了s所指存儲(chǔ)單元之后,s指針加1(*p->s)++使得s所指向的存儲(chǔ)單元的值增1*p++->s訪問(wèn)了s所指存儲(chǔ)單元之后,使p增1現(xiàn)在是22頁(yè)\一共有32頁(yè)\編輯于星期日12.2.8利用結(jié)構(gòu)體變量構(gòu)成鏈表
1、鏈表的特點(diǎn):鏈表是一種動(dòng)態(tài)的進(jìn)行存儲(chǔ)分配的數(shù)據(jù)結(jié)構(gòu),程序執(zhí)行中,可以在需要時(shí)開(kāi)辟存儲(chǔ)單元,在不需要時(shí)釋放存儲(chǔ)單元。鏈表的結(jié)點(diǎn)包含數(shù)據(jù)域和鏈接域,數(shù)據(jù)域用來(lái)保存數(shù)據(jù)信息,鏈接域用來(lái)保存該結(jié)點(diǎn)的后繼結(jié)點(diǎn)或前驅(qū)結(jié)點(diǎn)的地址。一個(gè)鏈表用一個(gè)頭指針來(lái)保存該鏈表的首地址,即第一個(gè)結(jié)點(diǎn)的地址。頭指針是一個(gè)鏈表的標(biāo)志。此鏈表只能從當(dāng)前節(jié)點(diǎn)找到后繼節(jié)點(diǎn),故稱(chēng)為單鏈表。一個(gè)單鏈表的邏輯示意圖:
現(xiàn)在是23頁(yè)\一共有32頁(yè)\編輯于星期日【e12_1】一個(gè)簡(jiǎn)單的單鏈表。typedefstructslist{intdata;structslist*next;}SLIST;main(){SLISTn1,n2,n3,*head,*p;head=&n1;n1.data=1;n1.next=&n2;n2.data=2;n2.next=&n3;n3.data=3;n3.next=0;printf("\n");for(p=head;p!='\0';p=p->next)printf("%3d",p->data);}現(xiàn)在是24頁(yè)\一共有32頁(yè)\編輯于星期日2、建立單鏈表主要步驟為:生成只含有頭結(jié)點(diǎn)的空鏈表;然后讀取數(shù)據(jù)信息,生成新結(jié)點(diǎn),將數(shù)據(jù)存放于新結(jié)點(diǎn)中,插入新結(jié)點(diǎn)到單鏈表中重復(fù)第二步,直到輸入結(jié)束。根據(jù)新結(jié)點(diǎn)插入到鏈表的位置的不同,建立鏈表的方式,分為在表尾插入的方法和在表頭插入的方法。表尾插入:
e12_2.c表頭插入:
e12_3.c
現(xiàn)在是25頁(yè)\一共有32頁(yè)\編輯于星期日e12_2.cSLIST*CreateList(){SLIST*p,*head,*q;intx;head=(SLIST*)malloc(sizeof(SLIST));//生成頭結(jié)點(diǎn)
p=head;//尾指針指向頭結(jié)點(diǎn)
scanf(“%d”,&x);while(x!=-1){q=(SLIST*)malloc(sizeof(SLIST));q->data=x;p->next=q;p=q;scanf(“%d”,&x);}p->next=NULL;returnhead;}現(xiàn)在是26頁(yè)\一共有32頁(yè)\編輯于星期日e12_3cSLIST*CreateList(){SLIST*p=NULL,*head,*q;intx;scanf(“%d”,&x);while(x!=-1){q=(SLIST*)malloc(sizeof(SLIST));q->data=x;q->next=p;p=q;scanf(“%d”,&x);}head=(SLIST*)malloc(sizeof(SLIST));/*建立頭節(jié)點(diǎn)*/head->next=p;returnhead;}現(xiàn)在是27頁(yè)\一共有32頁(yè)\編輯于星期日3、在單鏈表中插入結(jié)點(diǎn)設(shè)指針變量s指向待插入結(jié)點(diǎn),假設(shè)指定結(jié)點(diǎn)為p。
插入到指定結(jié)點(diǎn)之后:①snext=pnext;②pnext=s;
插入到指定結(jié)點(diǎn)之前:首先要找到p的前驅(qū)結(jié)點(diǎn)q。p20214.8
現(xiàn)在是28頁(yè)\一共有32頁(yè)\編輯于星期日4、在單鏈表中刪除結(jié)點(diǎn)
在一個(gè)單鏈表中刪除指定結(jié)點(diǎn),首先要找到該結(jié)點(diǎn)的前驅(qū)結(jié)點(diǎn),然后修改前驅(qū)結(jié)點(diǎn)的指針域指向待刪結(jié)點(diǎn)的后繼結(jié)點(diǎn),然后釋放被刪結(jié)點(diǎn)。
現(xiàn)在是29頁(yè)\一共有32頁(yè)\編輯于星期日12.3共用體
公用體類(lèi)型說(shuō)明和變量定義與結(jié)構(gòu)體方式完全相同,不同的是公用體變量的所有成員占有同一個(gè)存儲(chǔ)空間。
12.3.1共用體類(lèi)型union共用體名{
類(lèi)型標(biāo)識(shí)符成員名;類(lèi)型標(biāo)識(shí)符成員名;
…………….};例
uniondata{inti;charch;floatf;}
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 請(qǐng)示報(bào)告重大事項(xiàng)制度
- 計(jì)量檢定實(shí)驗(yàn)室八項(xiàng)制度
- 行政人事部績(jī)效制度
- 銀川公司審計(jì)制度
- 2026湖北武漢武昌區(qū)中南電力設(shè)計(jì)院有限公司數(shù)智科技公司招聘4人參考考試試題附答案解析
- 2026年淄博周村區(qū)事業(yè)單位公開(kāi)招聘綜合類(lèi)崗位人員(9人)參考考試題庫(kù)附答案解析
- 2026山東事業(yè)單位統(tǒng)考省文物考古研究院招聘初級(jí)綜合類(lèi)崗位2人備考考試題庫(kù)附答案解析
- 2026福建三明市永安市羅坊鄉(xiāng)人民政府招聘編外聘用駕駛員1人參考考試試題附答案解析
- 2026西藏昌都卡若區(qū)招聘社區(qū)工作者48人參考考試試題附答案解析
- 2026湖北武漢武昌區(qū)中南電力設(shè)計(jì)院有限公司數(shù)智科技公司招聘4人參考考試題庫(kù)附答案解析
- 2025年大學(xué)生物(細(xì)胞結(jié)構(gòu)與功能)試題及答案
- 2026年新通信安全員c證考試題及答案
- 2026屆上海市徐匯區(qū)上海第四中學(xué)高一上數(shù)學(xué)期末學(xué)業(yè)質(zhì)量監(jiān)測(cè)試題含解析
- T-ZZB 2211-2021 單面干手器標(biāo)準(zhǔn)規(guī)范
- 快遞安檢協(xié)議書(shū)
- 水利水電建設(shè)工程驗(yàn)收技術(shù)鑒定導(dǎo)則
- 特困供養(yǎng)政策培訓(xùn)課件
- 2025年品質(zhì)經(jīng)理年度工作總結(jié)及2026年度工作計(jì)劃
- 土壤監(jiān)測(cè)員職業(yè)資格認(rèn)證考試題含答案
- 2025中國(guó)胸痛中心診療指南
- 骨科常見(jiàn)疾病及康復(fù)治療
評(píng)論
0/150
提交評(píng)論