版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
C語(yǔ)言程序設(shè)計(jì)第十二章結(jié)構(gòu)體與共用體1學(xué)習(xí)內(nèi)容結(jié)構(gòu)體(結(jié)構(gòu)structure)、共用體(聯(lián)合union)類型的定義結(jié)構(gòu)體變量、結(jié)構(gòu)體數(shù)組與指針向函數(shù)傳遞結(jié)構(gòu)體變量、結(jié)構(gòu)體數(shù)組、結(jié)構(gòu)體指針動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)、動(dòng)態(tài)鏈表12-2從基本數(shù)據(jù)類型到抽象數(shù)據(jù)類型12-3二進(jìn)制數(shù)——類型本不存在內(nèi)存里存的內(nèi)容,你認(rèn)為它是什么,它就是什么在早期的機(jī)器指令及匯編語(yǔ)言中,數(shù)據(jù)對(duì)象均用二進(jìn)制數(shù)表示,沒有類型的概念一般的CPU只支持兩種類型整數(shù)、浮點(diǎn)數(shù)4在高級(jí)語(yǔ)言引入了基本數(shù)據(jù)類型整型、浮點(diǎn)型、字符型等不同語(yǔ)言會(huì)定義不同的基本類型基本數(shù)據(jù)類型并不能方便地解決所有問題有些語(yǔ)言(如PL/1)中試圖規(guī)定較多的類型,如數(shù)組、樹、棧等,但實(shí)踐證明不是個(gè)好辦法從基本數(shù)據(jù)類型到抽象數(shù)據(jù)類型5用戶自己構(gòu)造數(shù)據(jù)類型——復(fù)合數(shù)據(jù)類型由基本數(shù)據(jù)類型迭代派生而來(lái),表示復(fù)雜的數(shù)據(jù)對(duì)象典型的代表就是“結(jié)構(gòu)體”抽象數(shù)據(jù)類型(AbstractDataType,ADT)在復(fù)合數(shù)據(jù)類型基礎(chǔ)上增加了對(duì)數(shù)據(jù)的操作抽象數(shù)據(jù)類型進(jìn)而進(jìn)化為“類(Class)”這是一個(gè)跨時(shí)代的進(jìn)步Class是Object-Oriented的一個(gè)重要概念從基本數(shù)據(jù)類型到抽象數(shù)據(jù)類型思考一個(gè)問題在程序里表示一個(gè)人(姓名、年齡、性別、……),怎么表示?想表示多個(gè)人呢?如何用計(jì)算機(jī)程序?qū)崿F(xiàn)下述表格的管理?表12-1某學(xué)校學(xué)生成績(jī)管理表學(xué)號(hào)姓名性別入學(xué)時(shí)間計(jì)算機(jī)原理英語(yǔ)數(shù)學(xué)音樂1令狐沖男1999908372822林平之男1999789288783岳靈珊女1999897298664任瑩瑩女1999789587905……6……12-6int studentId[30];/*每個(gè)學(xué)生的學(xué)號(hào)*/char studentName[30][10];/*每個(gè)學(xué)生的姓名*/char studentSex[30][2];/*每個(gè)學(xué)生的性別*/int
timeOfEnter[30];/*入學(xué)時(shí)間用int表示*/int scoreComputer[30];/*計(jì)算機(jī)原理課的成績(jī)*/int scoreEnglish[30];/*英語(yǔ)課的成績(jī)*/
int scoreMath[30]; /*數(shù)學(xué)課的成績(jī)*/int scoreMusic[30]; /*音樂課的成績(jī)*/數(shù)組解決方法(1)12-7數(shù)組解決方法(2)intstudentId[30]={1,2,3,4,5,6};charstudentName[30][10]={{"令狐沖"},{"林平之"},{"岳靈珊"},{"任瑩瑩"}};charstudentSex[30][2]={{"男"},{"男"},{"女"},{"女"}};inttimeOfEnter[30]={1999,1999,1999,1999};intscoreComputer[30]={90,78,89,78};intscoreEnglish[30]={83,92,72,95};intscoreMath[30]={72,88,98,87};intscoreMusic[30]={82,78,66,90};12-8數(shù)組解決方法(3)數(shù)據(jù)的內(nèi)存管理方式90788978……83927295……72889887……82786690……1234……令狐沖林平之岳靈珊任瑩瑩……男男女女……1999199919991999……12-9分配內(nèi)存不集中,尋址效率不高對(duì)數(shù)組進(jìn)行賦初值時(shí),容易發(fā)生錯(cuò)位結(jié)構(gòu)顯得比較零散,不容易管理希望的內(nèi)存分配圖1令狐沖男1999908372822林平之男1999789288783岳靈珊女1999897298664任瑩瑩女199978958790
問題提出12-10結(jié)構(gòu)體的解決方法structSTUDENT
{
intnumber;/*每個(gè)學(xué)生的學(xué)號(hào)*/
charname[10];/*每個(gè)學(xué)生的姓名*/
charsex[4];/*每個(gè)學(xué)生的性別*/
intenter;/*每個(gè)學(xué)生的入學(xué)時(shí)間*/
int computer;/*每個(gè)學(xué)生的計(jì)算機(jī)原理成績(jī)*/
int english;/*每個(gè)學(xué)生的英語(yǔ)成績(jī)*/
int math; /*每個(gè)學(xué)生的數(shù)學(xué)成績(jī)*/
int music;/*每個(gè)學(xué)生的音樂成績(jī)*/
};struct
STUDENTstudent;/*定義結(jié)構(gòu)體變量*/struct
STUDENTstudents[4];/*定義結(jié)構(gòu)體數(shù)組*/12-11是一個(gè)類型structstudent{
intnum;
charname[20];
charsex;
intage;
floatscore;
charaddr[30];};結(jié)構(gòu)體定義struct
結(jié)構(gòu)體名{
類型關(guān)鍵字
成員名1;
類型關(guān)鍵字成員名2;…...
類型關(guān)鍵字成員名n;};結(jié)構(gòu)體的定義只定義了數(shù)據(jù)的形式,即聲明了一種復(fù)雜的數(shù)據(jù)類型,并未生成任何變量。numnamesexagescoreaddr結(jié)構(gòu)體定義形成一個(gè)樣板,用于生成結(jié)構(gòu)體變量結(jié)構(gòu)體的定義結(jié)構(gòu)體12-12先定義結(jié)構(gòu)體類型再定義變量名在定義類型的同時(shí)定義變量直接定義結(jié)構(gòu)體變量(不出現(xiàn)結(jié)構(gòu)體名)struct
studentstudent1,student2;struct
student{intnum;charname[20];
charsex;
intage;floatscore;charaddr[30];}student1,student2;struct{intnum;charname[20];
charsex;
intage;floatscore;
charaddr[30];}student1,student2;結(jié)構(gòu)體變量的定義(1)
結(jié)構(gòu)體12-13用typedef為已存在的類型定義新名字結(jié)構(gòu)體變量的定義(2)struct
student{
intnum;
charname[20];
charsex;
intage;
floatscore;
charaddr[30];};typedef
struct
student
STUD;STUDstudent1,student2;用STUD代替struct
student類型12-14結(jié)構(gòu)體定義可以嵌套結(jié)構(gòu)體變量的定義(3)學(xué)號(hào)姓名性別年齡出生年月住址年月日struct
student{
intnum;
charname[20];
charsex;
intage;struct
data
birthday;
charaddr[30];}student1,student2;struct
date{
intyear;
intmonth;
intday;};typedefstruct
dateDATE;DATEbirthday;12-15等價(jià)于12.2.4結(jié)構(gòu)體變量的初始化等價(jià)于注意!12-16訪問結(jié)構(gòu)體變量的成員必須使用成員選擇運(yùn)算符(也稱圓點(diǎn)運(yùn)算符)12.2.6結(jié)構(gòu)體變量的引用當(dāng)出現(xiàn)結(jié)構(gòu)體嵌套時(shí),必須以級(jí)聯(lián)方式訪問結(jié)構(gòu)體成員12-17STUDENTstu1;【例12.1】演示結(jié)構(gòu)體變量的賦值和引用方法12.2.6結(jié)構(gòu)體變量的引用按結(jié)構(gòu)體的成員順序逐一對(duì)相應(yīng)成員進(jìn)行賦值格式符%02d中2d前面的前導(dǎo)符0表示輸出數(shù)據(jù)時(shí),若左邊有多余位,則補(bǔ)012-18【例12.1】若要從鍵盤輸入結(jié)構(gòu)體變量stu1的內(nèi)容,那么程序如何修改??jī)蓚€(gè)地址有何不同?12-19【例12.1】若要從鍵盤輸入結(jié)構(gòu)體變量stu1的內(nèi)容,那么程序如何修改?結(jié)構(gòu)體成員的地址與該成員在結(jié)構(gòu)體中所處的位置及其所占內(nèi)存的字節(jié)數(shù)相關(guān)結(jié)構(gòu)體變量的地址&stu2是該變量所占內(nèi)存空間的首地址12-2012.2.7結(jié)構(gòu)體所占內(nèi)存的字節(jié)數(shù)struct類型用內(nèi)存字節(jié)數(shù)=?是所有成員變量的內(nèi)存總和嗎?printf("%d\n",sizeof(struct
sample));用運(yùn)算符sizeof獲得結(jié)構(gòu)體大小sizeof(變量或表達(dá)式)sizeof(類型)12Why?printf("%d\n",sizeof(SAMPLE));【例12.2】12-212212.2.7結(jié)構(gòu)體所占內(nèi)存的字節(jié)數(shù)事實(shí)上,所有數(shù)據(jù)類型在內(nèi)存中都是從偶數(shù)地址開始存放的且結(jié)構(gòu)所占的實(shí)際空間一般是按照機(jī)器字長(zhǎng)對(duì)齊的不同的編譯器、平臺(tái),對(duì)齊方式會(huì)有變化結(jié)構(gòu)體變量的成員的存儲(chǔ)對(duì)齊規(guī)則是與機(jī)器相關(guān)的具有特定數(shù)據(jù)類型的數(shù)據(jù)項(xiàng)大小也是與機(jī)器相關(guān)的所以一個(gè)結(jié)構(gòu)體在內(nèi)存中的存儲(chǔ)格式也是與機(jī)器相關(guān)的非所有成員變量的內(nèi)存總和12個(gè)字節(jié)chfchchchfnumnamesexagebirthdayaddrmonthdayyear結(jié)構(gòu)體成員的初始化student1.birthday.year=2007struct
student{
intnum;
charname[20];
charsex;
intage;struct
data
birthday;
charaddr[30];}student1,student2;struct
date{
intyear;
intmonth;
intday;};12-23結(jié)構(gòu)體變量的引用和初始化注意不能將一個(gè)結(jié)構(gòu)體變量作為一個(gè)整體輸入/輸出,只能對(duì)每個(gè)具體的成員進(jìn)行輸入/輸出。例:假設(shè)聲明structSTUDENTstudent1,student2;printf("%d%s%d",student1);具有相同結(jié)構(gòu)體類型的變量可以整體賦值student1=student212-2412.3結(jié)構(gòu)體數(shù)組的定義和初始化建立了數(shù)據(jù)庫(kù)中的多條記錄,每條對(duì)應(yīng)一個(gè)學(xué)生信息12-25【例12.3】利用結(jié)構(gòu)體數(shù)組計(jì)算每個(gè)學(xué)生的平均分12-2612.4結(jié)構(gòu)體指針的定義和初始化ptstu1
STUDENT
stu1;
STUDENT
*pt;pt=&stu1;成員1成員2成員3成員4成員5如何定義指向結(jié)構(gòu)體變量的指針?STUDENT
*pt=&stu1;等價(jià)于12-2712.4結(jié)構(gòu)體指針的定義和初始化如何訪問結(jié)構(gòu)體指針變量所指向的結(jié)構(gòu)體成員呢?STUDENT
stu1;
STUDENT
*pt=&stu1;ptstu1成員1成員2成員3成員4成員5通過(guò)stu1和成員選擇運(yùn)算符訪問結(jié)構(gòu)體成員stu1.studentID=1;通過(guò)pt和指向運(yùn)算符訪問結(jié)構(gòu)體成員(*pt).studentID=1;
pt->studentID=1;12-2812.4結(jié)構(gòu)體指針的定義和初始化ptstu1成員1成員2成員3成員4成員5當(dāng)結(jié)構(gòu)體嵌套時(shí),如何訪問結(jié)構(gòu)體指針變量所指向的結(jié)構(gòu)體成員?stu1.
birthday.
year=1999;(*pt).
birthday.
year=1999;pt->
birthday.
year=1999;STUDENT
stu1;
STUDENT
*pt=&stu1;12-2912.4結(jié)構(gòu)體指針的定義和初始化
STUDENT
stu[30];
STUDENT
*pt;pt=stu;
如何定義指向結(jié)構(gòu)體數(shù)組的指針?STUDENT
*pt=stu;等價(jià)于STUDENT
*pt=&stu[0];等價(jià)于ptstu[30]stu[0]stu[1]stu[2]stu[3]stu[4]stu[5]......stu[29]12-30使用pt++,使pt指向stu[1]pt->studentID等價(jià)于
stu[1].studentIDpt12.4結(jié)構(gòu)體指針的定義和初始化
STUDENT
stu[30];
STUDENT
*pt=stu;
如何訪問結(jié)構(gòu)體數(shù)組指針指向的結(jié)構(gòu)體成員?stu[30]stu[0]stu[1]stu[2]stu[3]stu[4]stu[5]......stu[29]12-3112.5向函數(shù)傳遞結(jié)構(gòu)體向函數(shù)傳遞結(jié)構(gòu)體的單個(gè)成員復(fù)制單個(gè)成員的內(nèi)容函數(shù)內(nèi)對(duì)結(jié)構(gòu)內(nèi)容的修改不影響原結(jié)構(gòu)向函數(shù)傳遞結(jié)構(gòu)體的完整結(jié)構(gòu)向函數(shù)傳遞結(jié)構(gòu)體的首地址12-32structdate{
intyear;
intmonth;
intday;};voidfunc(structdate
p){
p.year=2000;
p.month=5;
p.day=22;}Beforefunctioncall:1999/04/23Afterfunctioncall:1999/04/23結(jié)構(gòu)體變量
作函數(shù)參數(shù)【例12.4】12-33structdate{
intyear;
intmonth;
intday;};voidfunc(structdate
*p){
p->year=2000;
p->month=5;
p->day=22;}Beforefunctioncall:1999/04/23Afterfunctioncall:2000/05/22結(jié)構(gòu)體指針
作函數(shù)參數(shù)指針作函數(shù)形參實(shí)參必須為地址值【例12.5】12-34structdate{
intyear;
intmonth;
intday;};structdatefunc(structdate
p){
p.year=2000;
p.month=5;
p.day=22;
returnp;}Beforefunctioncall:1999/04/23Afterfunctioncall:2000/05/22結(jié)構(gòu)體變量
作函數(shù)返回值【例12.6】12-3512.5向函數(shù)傳遞結(jié)構(gòu)體向函數(shù)傳遞結(jié)構(gòu)體的完整結(jié)構(gòu)復(fù)制整個(gè)結(jié)構(gòu)體成員的內(nèi)容,多個(gè)值函數(shù)內(nèi)對(duì)結(jié)構(gòu)內(nèi)容的修改不影響原結(jié)構(gòu)內(nèi)容傳遞更直觀,但開銷大向函數(shù)傳遞結(jié)構(gòu)體的首地址用結(jié)構(gòu)體數(shù)組/結(jié)構(gòu)體指針作函數(shù)參數(shù)僅復(fù)制結(jié)構(gòu)體的首地址,一個(gè)值修改結(jié)構(gòu)體指針?biāo)赶虻慕Y(jié)構(gòu)體的內(nèi)容指針傳遞效率高12-3612.5向函數(shù)傳遞結(jié)構(gòu)體#include<stdio.h>#defineN30typedefstructdate{intyear;intmonth;intday;}DATE;typedefstructstudent{longID;charName[80];charSex;DATEbirthday;floatscore[3];}STUDENT;voidInputScore(STUDENTstu[],intn,intm);voidAverScore(STUDENTstu[],floataver[],intn,intm);voidPrintScore(STUDENTstu[],floataver[],intn,intm);【例12.7】修改例12.3程序,用結(jié)構(gòu)體數(shù)組作函數(shù)參數(shù)編程并輸出計(jì)算學(xué)生的平均分12-371.結(jié)構(gòu)體數(shù)組做函數(shù)參數(shù)12-38intmain(){floataver[N];STUDENTstu[N];intn;printf("Howmanystudent?");scanf("%d",&n);InputScore(stu,n,3);AverScore(stu,aver,n,3);PrintScore(stu,aver,n,3);return0;}【例12.7】修改例12.3程序,用結(jié)構(gòu)體數(shù)組作函數(shù)參數(shù)編程并輸出計(jì)算學(xué)生的平均分12.5向函數(shù)傳遞結(jié)構(gòu)體函數(shù)1:數(shù)據(jù)讀取函數(shù)2:計(jì)算平均分函數(shù)3:打印輸出12-39voidInputScore(STUDENTstu[],intn,intm){inti,j;for(i=0;i<n;i++){scanf("%ld%s%c",&stu[i].ID,stu[i].Name,&stu[i].Sex);scanf("%d%d%d",&stu[i].birthday.year,&stu[i].birthday.month,&stu[i].birthday.day);for(j=0;j<m;j++) scanf("%f",&stu[i].score[j]);}}【例12.7】修改例12.3程序,用結(jié)構(gòu)體數(shù)組作函數(shù)參數(shù)編程并輸出計(jì)算學(xué)生的平均分12.5向函數(shù)傳遞結(jié)構(gòu)體函數(shù)1:數(shù)據(jù)讀取12-40voidAverScore(STUDENTstu[],floataver[],intn,intm){floatsum;inti,j;for(i=0;i<n;i++){sum=0;for(j=0;j<m;j++)sum=sum+stu[i].score[j];aver[i]=(float)sum/m;}}【例12.7】修改例12.3程序,用結(jié)構(gòu)體數(shù)組作函數(shù)參數(shù)編程并輸出計(jì)算學(xué)生的平均分12.5向函數(shù)傳遞結(jié)構(gòu)體函數(shù)2:計(jì)算平均分12-41voidPrintScore(STUDENTstu[],floataver[],intn,intm){inti,j;for(i=0;i<n;i++){printf("%ld\t%s\t%c\t",stu[i].ID,stu[i].Name,stu[i].Sex);printf("%d/%d/%d/",stu[i].birthday.year,stu[i].birthday.month,stu[i].birthday.day);for(j=0;j<m;j++)printf("\t%f",stu[i].score[j]);printf("\t%f\n",aver[i]);}}
【例12.7】修改例12.3程序,用結(jié)構(gòu)體數(shù)組作函數(shù)參數(shù)編程并輸出計(jì)算學(xué)生的平均分12.5向函數(shù)傳遞結(jié)構(gòu)體函數(shù)3:打印輸出12.5向函數(shù)傳遞結(jié)構(gòu)體#include<stdio.h>#defineN30typedefstructdate{intyear;intmonth;intday;}DATE;typedefstructstudent{longID;charName[80];charSex;DATEbirthday;floatscore[3];}STUDENT;voidInputScore(STUDENTstu[],intn,intm);voidAverScore(STUDENTstu[],floataver[],intn,intm);voidPrintScore(STUDENTstu[],floataver[],intn,intm);【例12.7】修改例12.3程序,用結(jié)構(gòu)體指針作函數(shù)參數(shù)編程并輸出計(jì)算學(xué)生的平均分voidInputScore(STUDENT*pstu,intn,intm);voidAverScore(STUDENT*pstu,float*paver,intn,intm);voidPrintScore(STUDENT*pstu,float*paver,intn,intm);12-422.結(jié)構(gòu)體指針做函數(shù)參數(shù)12-43intmain(){intn;floataver[N];STUDENTstu[N];
printf("Howmanystudent?");scanf("%d",&n);InputScore(stu,n,3);AverScore(stu,aver,n,3);PrintScore(stu,aver,n,3);return0;}12.5向函數(shù)傳遞結(jié)構(gòu)體函數(shù)1:數(shù)據(jù)讀取函數(shù)2:計(jì)算平均分函數(shù)3:打印輸出2.結(jié)構(gòu)體指針做函數(shù)參數(shù)12-44voidInputScore(STUDENTstu[],intn,intm){inti,j;for(i=0;i<n;i++){scanf("%ld%s%c",&pstu1[i].ID,pstu1[i].Name,&pstu1[i].Sex);scanf("%d%d%d",&pstu1[i].birthday.year,&pstu1[i].birthday.month,&pstu1[i].birthday.day);for(j=0;j<m;j++) scanf("%f",&pstu1[i].score[j]);}}【例12.7】修改例12.3程序,用結(jié)構(gòu)體指針作函數(shù)參數(shù)編程并輸出計(jì)算學(xué)生的平均分12.5向函數(shù)傳遞結(jié)構(gòu)體函數(shù)1:數(shù)據(jù)讀取voidInputScore(STUDENT*pstu1,intn,intm)2.結(jié)構(gòu)體指針做函數(shù)參數(shù)12-45voidAverScore(STUDENTstu[],floataver[],intn,intm){floatsum;inti,j;for(i=0;i<n;i++){sum=0;for(j=0;j<m;j++)sum=sum+pstu1[i].score[j];
paver1[i]=(float)sum/m;}}【例12.7】修改例12.3程序,用結(jié)構(gòu)體指針作函數(shù)參數(shù)編程并輸出計(jì)算學(xué)生的平均分12.5向函數(shù)傳遞結(jié)構(gòu)體函數(shù)2:計(jì)算平均分voidAverScore(STUDENT*pstu1,float*paver1,intn,intm)2.結(jié)構(gòu)體指針做函數(shù)參數(shù)12-46voidPrintScore(STUDENTstu[],floataver[],intn,intm){inti,j;for(i=0;i<n;i++){printf("%ld\t%s\t%c\t",pstu1[i].ID,pstu1[i].Name,pstu1[i].Sex);printf("%d/%d/%d/",pstu1[i].birthday.year,pstu1[i].birthday.month,pstu1[i].birthday.day);for(j=0;j<m;j++)printf("\t%f",pstu1[i].score[j]);printf("\t%f\n",paver1[i]);}}
【例12.7】修改例12.3程序,用結(jié)構(gòu)體指針作函數(shù)參數(shù)編程并輸出計(jì)算學(xué)生的平均分12.5向函數(shù)傳遞結(jié)構(gòu)體函數(shù)3:打印輸出voidPrintScore(STUDENT*pstu1,float*paver1,intn,intm)2.結(jié)構(gòu)體指針做函數(shù)參數(shù)12.5向函數(shù)傳遞結(jié)構(gòu)體【例12.7】修改例12.3程序,主函數(shù)用可變長(zhǎng)一維數(shù)組編程并輸出計(jì)算學(xué)生的平均分3.指針做實(shí)參12-47函數(shù)2:計(jì)算平均分函數(shù)3:打印輸出函數(shù)1:數(shù)據(jù)讀取12.5向函數(shù)傳遞結(jié)構(gòu)體3.指針做實(shí)參12-48函數(shù)1:數(shù)據(jù)讀取12.5向函數(shù)傳遞結(jié)構(gòu)體3.指針做實(shí)參12-49函數(shù)2:計(jì)算平均分12.5向函數(shù)傳遞結(jié)構(gòu)體3.指針做實(shí)參12-50函數(shù)3:打印輸出12.5向函數(shù)傳遞結(jié)構(gòu)體3.指針做實(shí)參12-51結(jié)構(gòu)體(Struct)把關(guān)系緊密且邏輯相關(guān)的多種不同類型的變量,組織到統(tǒng)一的名字之下占用相鄰的一段內(nèi)存單元共用體,也稱聯(lián)合(Union)把情形互斥但邏輯相關(guān)的多種不同類型的變量,組織到統(tǒng)一的名字之下占用同一段內(nèi)存單元,每一時(shí)刻只有一個(gè)數(shù)據(jù)起作用12-52用戶自定義的數(shù)據(jù)類型12.6共用體structsample{
shorti;
charch;
floatf;};0x0037b00unionsample{
shorti;
charch;
floatf;};printf("%d\n",sizeof(structsample));8個(gè)字節(jié)ichf4個(gè)字節(jié)printf("%d\n",sizeof(unionsample));ichf【例12.8】12-5312.6共用體sizeof(unionnumber)取決于占空間最多的那個(gè)成員變量0x0037b00同一內(nèi)存單元在每一瞬時(shí)只能存放其中一種類型的成員起作用的成員是最后一次存放的成員,不能作為函數(shù)參數(shù)不能進(jìn)行比較操作,只能對(duì)第一個(gè)成員初始化f4個(gè)字節(jié)12-5412-5512.6共用體12-5612.6共用體12.7.1枚舉數(shù)據(jù)類型枚舉(Enumeration)數(shù)據(jù)類型描述的是一組整型值的集合用于當(dāng)某些量?jī)H由有限個(gè)數(shù)據(jù)值組成時(shí)
enumweeks{SUN,MON,TUE,WED,THU,FRI,SAT};
enumweekstoday;enumresponse{no,yes,none};enumresponseanswer;
today=TUE;
answer=yes;
enumresponse{no=-1,yes=1,none=0};其值為2其值為112-5758下面的結(jié)構(gòu)是什么意思?structtemp
{
int data;
structtemppt;
};CB下的錯(cuò)誤提示:field'pt'hasincompletetypeVC下的錯(cuò)誤提示:'pt'usesundefinedstruct'temp'下面的結(jié)構(gòu)是什么意思呢?structtemp
{
intdata;
structtemp*pt;
};結(jié)構(gòu)體聲明時(shí)不能包含本結(jié)構(gòu)體類型成員,系統(tǒng)將無(wú)法為這樣的結(jié)構(gòu)體類型分配內(nèi)存
可包含指向本結(jié)構(gòu)體類型的指針變量問題的提出12.7.2動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)——單向鏈表structLink{
intdata;
structLink*next;};datanextheaddatanextdatanextdataNULL鏈表(LinkedTable):線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)特點(diǎn):用一組任意的存儲(chǔ)單元存儲(chǔ)線性表的數(shù)據(jù);存儲(chǔ)單元可以是連續(xù)的,也可是不連續(xù)的12-59鏈表的定義datanextheaddatanextdatanextdataNULL鏈表(Linkedtable):線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)為表示每個(gè)元素與后繼元素的邏輯關(guān)系,除存儲(chǔ)元素本身信息外,還要存儲(chǔ)其直接后繼信息兩部分信息組成一個(gè)節(jié)點(diǎn)structLink{
intdata;
structLink*next;};12-60頭節(jié)點(diǎn)中間節(jié)點(diǎn)中間節(jié)點(diǎn)末節(jié)點(diǎn)datanextheaddatanextdatanextdataNULL數(shù)據(jù)域:存儲(chǔ)數(shù)據(jù)元素信息(不局限一個(gè)成員數(shù)據(jù))指針域:存儲(chǔ)直接后繼的節(jié)點(diǎn)信息鏈表(LinkedTable):線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)為表示每個(gè)元素與后繼元素的邏輯關(guān)系,除存儲(chǔ)元素本身信息外,還要存儲(chǔ)其直接后繼信息structLink{
intdata;
structLink*next;};n個(gè)節(jié)點(diǎn)鏈接成一個(gè)鏈表(因?yàn)橹话粋€(gè)指針域,故又稱線性鏈表或單向鏈表)12-
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 課題申報(bào)參考:進(jìn)一步全面深化經(jīng)濟(jì)體制改革研究
- 二零二五版車輛抵押反擔(dān)保車輛租賃管理協(xié)議3篇
- 二零二五年度新型節(jié)能樓頂廣告牌拆除與改造升級(jí)協(xié)議3篇
- 2025版建筑材料銷售結(jié)算合同范本2篇
- 2025年度苗木種植與鄉(xiāng)村旅游開發(fā)合同3篇
- 二零二五年度彩鋼屋面防水補(bǔ)漏工程合同2篇
- 二零二五年度出口交易磋商與合同訂立策略指南4篇
- 二零二五年度安全生產(chǎn)教育培訓(xùn)機(jī)構(gòu)合作協(xié)議2篇
- 2025年度美容院?jiǎn)T工薪酬福利及績(jī)效管理合同
- 2025年度城市綠化工程監(jiān)理委托咨詢服務(wù)協(xié)議3篇
- 2024年安全教育培訓(xùn)試題附完整答案(奪冠系列)
- 神農(nóng)架研學(xué)課程設(shè)計(jì)
- 文化資本與民族認(rèn)同建構(gòu)-洞察分析
- 2025新譯林版英語(yǔ)七年級(jí)下單詞默寫表
- 《錫膏培訓(xùn)教材》課件
- 斷絕父子關(guān)系協(xié)議書
- 福建省公路水運(yùn)工程試驗(yàn)檢測(cè)費(fèi)用參考指標(biāo)
- 大氣污染控制工程 第四版
- 淺析商務(wù)英語(yǔ)中模糊語(yǔ)言的語(yǔ)用功能
- 工程勘察資質(zhì)分級(jí)標(biāo)準(zhǔn)和工程設(shè)計(jì)資質(zhì)分級(jí)標(biāo)準(zhǔn)
- 2023年四級(jí)計(jì)算機(jī)程序設(shè)計(jì)員核心考點(diǎn)題庫(kù)300題(含答案)
評(píng)論
0/150
提交評(píng)論