版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第第1515章章 結(jié)構(gòu)體結(jié)構(gòu)體C語言具有豐富的數(shù)據(jù)類型。結(jié)構(gòu)型、共用型和數(shù)組屬于構(gòu)造型數(shù)據(jù),都是由若干個數(shù)據(jù)組合而成的,但結(jié)構(gòu)型、共用型與數(shù)組不同之處在于它們可以用來處理不同的數(shù)據(jù)。C語言除了系統(tǒng)定義的數(shù)據(jù)類型之處,允許用戶自己定義數(shù)據(jù)類型,結(jié)構(gòu)體,共用體。結(jié)構(gòu)體類型定義;結(jié)構(gòu)體變量的定義與引用;結(jié)構(gòu)數(shù)組;結(jié)構(gòu)體指針;鏈表。15.1 15.1 結(jié)構(gòu)體類型定義結(jié)構(gòu)體類型定義結(jié)構(gòu)體是由一批數(shù)據(jù)組合而成的一種新的數(shù)據(jù)類型。組成結(jié)構(gòu)型數(shù)據(jù)的每個數(shù)據(jù)稱為結(jié)構(gòu)型數(shù)據(jù)的“成員”。這些成員可以具有不同的數(shù)據(jù)類型。由于結(jié)構(gòu)體數(shù)據(jù)的成員類型不同,因此結(jié)構(gòu)體要由用戶在程序中自己定義。15.1.1 15.1.1 結(jié)構(gòu)
2、體類型的說明結(jié)構(gòu)體類型的說明C語言規(guī)定,結(jié)構(gòu)體是由用戶在程序中自己定義的一種數(shù)據(jù)類型。用戶可以按照自己的需要,先定義結(jié)構(gòu)體,然后再定義這種結(jié)構(gòu)型的變量、數(shù)組以及指針變量。 15.1.2 15.1.2 結(jié)構(gòu)體類型的定義結(jié)構(gòu)體類型的定義結(jié)構(gòu)體類型定義的一般形式為:struct 結(jié)構(gòu)體名數(shù)據(jù)類型1 成員名1;數(shù)據(jù)類型2 成員名2;數(shù)據(jù)類型3 成員名3;數(shù)據(jù)類型n 成員名n;;例如:struct studentint number;/*學(xué)生的學(xué)號*/c h a r n a m e 2 0 ;/*學(xué)生的姓名*/char sex;/*學(xué)生的性別*/float score7;/*七門課程績*/;對于結(jié)構(gòu)體類
3、型的定義需要做以下幾點說明:(1)結(jié)構(gòu)體名是用戶用于標(biāo)識結(jié)構(gòu)體成選取的標(biāo)識符,必須符號標(biāo)識符的命名規(guī)則。(2)數(shù)據(jù)類型1數(shù)據(jù)類型n,可以是任何一種數(shù)據(jù)類型,可以是基本類型說明符,也可以構(gòu)造體類型說明符,也可是已經(jīng)定義過的結(jié)構(gòu)體名。(3)成員名1成員名n,是用戶自己定義的標(biāo)識符,用來標(biāo)識該結(jié)構(gòu)體所包含的成員名稱。相當(dāng)于變量定義中的變量名。(3)結(jié)構(gòu)體定義在括號后的分號是不可少的。(4)如果成員名的前面有“*”,表砂該成員是指針型;如果成員名后面有“長度”,表砂該成員是數(shù)組型。struct studentint number;char *name; /*定義成員名為name,數(shù)據(jù)類型為指針*/ch
4、ar sex;float score7; /*定義成員名為score,數(shù)據(jù)類型為數(shù)組*/; (5)當(dāng)某個結(jié)構(gòu)體成員的數(shù)據(jù)類型是另一個結(jié)構(gòu)體時,稱為“嵌套結(jié)構(gòu)體”。此時,作為成員數(shù)據(jù)類型的結(jié)構(gòu)體的定義必須出現(xiàn)在本結(jié)構(gòu)體定義之前。 (6)當(dāng)結(jié)構(gòu)體成員的數(shù)據(jù)類型選取了自身的結(jié)構(gòu)體時,成員只能是本結(jié)構(gòu)體的指針變量或者是結(jié)構(gòu)體指針型數(shù)組,但不能是結(jié)構(gòu)體變量或結(jié)構(gòu)數(shù)組。例如:struct stru1int s1;struct stru1 *s2;/*正確定義,成員是指針型變量,數(shù)據(jù)類型可以是本結(jié)構(gòu)體*/struct stru1 *s310;/*正確定義,成員是指針型數(shù)組,數(shù)據(jù)類型可以是本結(jié)構(gòu)體*/stru
5、ct stru1 s4;/*錯誤定義,成員是變量,數(shù)據(jù)類型不能是本結(jié)構(gòu)型*/struct stru1 s53;/*錯誤定義,成員是數(shù)組,數(shù)據(jù)類型不能是本結(jié)構(gòu)型*/(7)結(jié)構(gòu)體是一種數(shù)據(jù)類型,在定義結(jié)構(gòu)體進(jìn),其成員并不分配內(nèi)存。只有用“struct 結(jié)構(gòu)體名”來定義該結(jié)構(gòu)型的變量、數(shù)組以及指針變量時,以會分配內(nèi)存。 15.2 15.2 結(jié)構(gòu)體變量的定義與引用結(jié)構(gòu)體變量的定義與引用結(jié)構(gòu)體類型本身是一個數(shù)據(jù)類型,具體的數(shù)據(jù),也不占用系統(tǒng)內(nèi)存空間。當(dāng)程序中已經(jīng)定義了結(jié)構(gòu)體時,就可以使用“struct 結(jié)構(gòu)體名”作為數(shù)據(jù)類型符來定義處理這種結(jié)構(gòu)體數(shù)據(jù)的變量、數(shù)組及指針等。15.2.1 15.2.1 結(jié)構(gòu)
6、體變量的定義與初始化結(jié)構(gòu)體變量的定義與初始化1 1先定義結(jié)構(gòu)體,再定義結(jié)構(gòu)體變量先定義結(jié)構(gòu)體,再定義結(jié)構(gòu)體變量這種方式的定義語句格式如下:這種方式的定義語句格式如下:struct 結(jié)構(gòu)體名數(shù)據(jù)類型1 成員名1;數(shù)據(jù)類型2 成員名2;數(shù)據(jù)類型n 成員名n;struct 結(jié)構(gòu)體名 結(jié)構(gòu)體變量名=初值;2 2在定義結(jié)構(gòu)體的同時定義變量在定義結(jié)構(gòu)體的同時定義變量這種方式的定義語句格式如下:這種方式的定義語句格式如下:struct 結(jié)構(gòu)體名數(shù)據(jù)類型1 成員名1;數(shù)據(jù)類型2 成員名2;數(shù)據(jù)類型n 成員名n;結(jié)構(gòu)體變量名=初值;3直接定義結(jié)構(gòu)體類型變量直接定義結(jié)構(gòu)體類型變量是指在定義結(jié)構(gòu)體時定義變量,并將結(jié)
7、構(gòu)體名省略。這種方式的定義語句格式如下:structint num;char name20;char sex;int age;float score7;char addr30;stu1=00001,”xiaoli”,m,23,80,90,70,91,85,88,68,”北京”,/*定義結(jié)構(gòu)體變量并賦值*/stu2=00002,”xiaowang”,f,22,96,68,78,88,79,76,84,”南京”;15.2.2 15.2.2 結(jié)構(gòu)體變量的引用結(jié)構(gòu)體變量的引用 在程序中使用結(jié)構(gòu)體變量時,不能將其作為一個整體來使用。結(jié)構(gòu)體中的成員可以當(dāng)成一般的變量來使用,結(jié)構(gòu)體變量的賦值、輸入、輸出、運
8、算等都是通過結(jié)構(gòu)體中的成員來實現(xiàn)的。結(jié)構(gòu)體變量成員的引用方法如下:結(jié)構(gòu)體變量名成員名printf(“%d,%s”,t1);printf(“%d,%s”,t1.num,);struct DATE /*定義學(xué)生出生日期的結(jié)構(gòu)體*/int year; /*定義年*/int month; /*定義月*/int day; /*定義日*/;struct studentint num;/*定義學(xué)生的學(xué)號*/char name10;/*定義學(xué)生的姓名*/struct DATE birthday;/*該成員的數(shù)據(jù)類型是生日結(jié)構(gòu)體*/t1=1000,”wangwu”,1987,12,5,t2;如果是
9、嵌套的結(jié)構(gòu)型,其成員的引用方法如下:如果是嵌套的結(jié)構(gòu)型,其成員的引用方法如下:外層結(jié)構(gòu)體變量名外層成員名內(nèi)層成員名上例中,如果要引用學(xué)生的出生日期,表示如下:上例中,如果要引用學(xué)生的出生日期,表示如下:t1birthdayyeart1birthdaymontht1birthdayday對于結(jié)構(gòu)體變量的引用做以下幾點說明:(1)結(jié)構(gòu)體變量的成員可以是任何類型,對該成員的操作與相同類型的普通變量并無區(qū)別,但需要在成員名前綴以結(jié)構(gòu)體變量名。 (2)結(jié)構(gòu)成員變量的使用與普通變量沒有區(qū)別,因此可根據(jù)類型進(jìn)行相應(yīng)的運算。 (3)如果成員本身又是一個結(jié)構(gòu)體時,必須逐級找到最低一級的成員才能使用。 (4)可以
10、使用成員的數(shù)據(jù),也可以使用成員的地址。結(jié)構(gòu)體變量的地址是可以使用的,結(jié)構(gòu)體變量的使用主要要為結(jié)構(gòu)體變量成員的引用、結(jié)構(gòu)型變量成員地址的引用及結(jié)構(gòu)型變量地址的引用。(5)允許將一個結(jié)構(gòu)變量直接賦值給別一個具有相同結(jié)構(gòu)的結(jié)構(gòu)體變量。 15.3 15.3 結(jié)構(gòu)數(shù)組結(jié)構(gòu)數(shù)組數(shù)組元素也可以是結(jié)構(gòu)體類型的數(shù)據(jù),當(dāng)數(shù)組元素為結(jié)構(gòu)體類型時,就稱為結(jié)構(gòu)數(shù)組。15.3.1 15.3.1 結(jié)構(gòu)數(shù)組的定義結(jié)構(gòu)數(shù)組的定義struct student/*定義名為student結(jié)構(gòu)體*/int num;char name20;char sex;int age;float score7;char addr30; stu13;
11、struct student stu23;對結(jié)構(gòu)數(shù)組賦予初值的格式如下:數(shù)組元素1的各個成員的初值表,數(shù)組元素2的各個成員的初值表,15.3.2 15.3.2 結(jié)構(gòu)數(shù)組的引用結(jié)構(gòu)數(shù)組的引用struct studentint num;char name20;float score;stu10;(1)結(jié)構(gòu)數(shù)組首地址的引用方法:結(jié)構(gòu)數(shù)組名&結(jié)構(gòu)數(shù)組名0例如:用stu或&stu0表示結(jié)構(gòu)數(shù)組stu的首地址。(2 2)結(jié)構(gòu)數(shù)組元素的引用)結(jié)構(gòu)數(shù)組元素的引用方法與普通數(shù)組的引用方法方法與普通數(shù)組的引用方法相似:相似:下標(biāo)法:結(jié)構(gòu)數(shù)組名下標(biāo)指針法:*(結(jié)構(gòu)型數(shù)組名+下標(biāo))例如:如果要獲得結(jié)構(gòu)
12、數(shù)組例如:如果要獲得結(jié)構(gòu)數(shù)組的第的第7 7個學(xué)生的信息,表示個學(xué)生的信息,表示方法:方法:stu6stu6* *(stu+6)(stu+6)(3 3)結(jié)構(gòu)數(shù)組元素的引用)結(jié)構(gòu)數(shù)組元素的引用方法:方法:&結(jié)構(gòu)數(shù)組名下標(biāo)結(jié)構(gòu)數(shù)組名+下標(biāo)&stu6&stu6和和(stu+6)(stu+6)表示結(jié)構(gòu)表示結(jié)構(gòu)數(shù)組數(shù)組stustu第第7 7個元素的地址。個元素的地址。(4 4)結(jié)構(gòu)數(shù)組元素的成員的引用方法:)結(jié)構(gòu)數(shù)組元素的成員的引用方法:結(jié)構(gòu)數(shù)組名下標(biāo).成員名(*(結(jié)構(gòu)型數(shù)組名+下標(biāo)).成員名例如:如果要獲得結(jié)構(gòu)數(shù)組第例如:如果要獲得結(jié)構(gòu)數(shù)組第2 2個學(xué)生的個學(xué)生的姓名,表示為:姓
13、名,表示為:( (* *(stu+1).name(stu+1).name(5 5)結(jié)構(gòu)數(shù)組元素的成員地址的引用方)結(jié)構(gòu)數(shù)組元素的成員地址的引用方法:法:&結(jié)構(gòu)數(shù)組名下標(biāo).成員名&(*(結(jié)構(gòu)型數(shù)組名+下標(biāo)).成員名如果要獲得結(jié)構(gòu)數(shù)組第如果要獲得結(jié)構(gòu)數(shù)組第2 2個學(xué)生的姓名存?zhèn)€學(xué)生的姓名存儲地址,表示為:儲地址,表示為:&&&(&(* *(stu+1).name(stu+1).name15.4 15.4 結(jié)構(gòu)體指針結(jié)構(gòu)體指針指向結(jié)構(gòu)全的指針稱為結(jié)構(gòu)體指針,結(jié)構(gòu)體指針變量也是指針變
14、量,和普通指針變量的惟一區(qū)別就是這個指針指向的一同一種結(jié)構(gòu)體變量或結(jié)構(gòu)數(shù)組。15.4.1 15.4.1 結(jié)構(gòu)體指針變量的定義結(jié)構(gòu)體指針變量的定義結(jié)構(gòu)體指針變量的定義與結(jié)構(gòu)體變量、結(jié)構(gòu)數(shù)組的定義相似。結(jié)構(gòu)體指針變量的定義也分為三種形式,一是在先定義結(jié)構(gòu)體,后定義結(jié)構(gòu)型指針;二是在定義結(jié)構(gòu)體的同時定義結(jié)構(gòu)體指針;三是直接定義結(jié)構(gòu)體指針。一般形式為:struct 結(jié)構(gòu)體名 *結(jié)構(gòu)指針變量名;例如:struct student /*定義名為student的結(jié)構(gòu)體*/int num;char name20;char sex;int age;float score7;char addr30;*p1; /*
15、定義結(jié)構(gòu)體同時定義結(jié)構(gòu)體指針變量*/struct student *p2;/*先定義結(jié)構(gòu)體再定義結(jié)構(gòu)體指針變量*/15.4.2 15.4.2 結(jié)構(gòu)體指針變量的引用結(jié)構(gòu)體指針變量的引用結(jié)構(gòu)體指針變量的引用有以下幾種:結(jié)構(gòu)體指針變量的引用有以下幾種:(1)使用結(jié)構(gòu)體指針變量指向結(jié)構(gòu)體變量或結(jié)構(gòu)型數(shù)組結(jié)構(gòu)體指針變量結(jié)構(gòu)體指針變量=&=&結(jié)構(gòu)體變量結(jié)構(gòu)體變量結(jié)構(gòu)體指針變量結(jié)構(gòu)體指針變量=&=&結(jié)構(gòu)數(shù)組名結(jié)構(gòu)數(shù)組名 下標(biāo)下標(biāo) 結(jié)構(gòu)體指針變量結(jié)構(gòu)體指針變量= =結(jié)構(gòu)數(shù)組名結(jié)構(gòu)數(shù)組名+ +下標(biāo)下標(biāo)結(jié)構(gòu)體指針變量結(jié)構(gòu)體指針變量= =結(jié)構(gòu)數(shù)組名結(jié)構(gòu)數(shù)組名(2)指向結(jié)構(gòu)體變量或數(shù)組
16、元素的指針變量的引用p1=&stu1;p1=&stu1;* *p p (3)指向結(jié)構(gòu)體數(shù)組首地址的指針變量的引用p2=stu;p2=stu;* *(p2+4)(p2+4) (4)使用指向結(jié)構(gòu)體變量或結(jié)構(gòu)數(shù)組的指針變量引用其成員(*結(jié)構(gòu)體指針變量結(jié)構(gòu)體指針變量).成員名成員名結(jié)構(gòu)體指針變量結(jié)構(gòu)體指針變量成員名成員名例如例如:(*p1).nump1num(5)使用指向結(jié)構(gòu)數(shù)組首地址的指針變量引用其成員(*(結(jié)構(gòu)體指針變量結(jié)構(gòu)體指針變量+下標(biāo)下標(biāo)).成員名成員名(結(jié)構(gòu)體指針變量結(jié)構(gòu)體指針變量+下標(biāo)下標(biāo))成員名成員名例如:例如:p2=stu2;(*(p2+1).num(p2+1)num
17、15.5 15.5 鏈表鏈表鏈表是一種特殊的結(jié)構(gòu)體,它的外部結(jié)構(gòu)是一串存放數(shù)據(jù)的對象,它的內(nèi)部結(jié)構(gòu)包含兩部分,即存放數(shù)據(jù)和指針。15.5.1 15.5.1 鏈表概述鏈表概述1靜態(tài)與動態(tài)內(nèi)存分配分配固定大小的內(nèi)存分配方法稱之為靜態(tài)內(nèi)存分配 所謂動態(tài)內(nèi)存分配就是指在程序執(zhí)行的過程中動態(tài)地分配或者回收存儲空間的分配內(nèi)存的方法。 2鏈表的定義一個結(jié)點的結(jié)構(gòu)體定義如下:struct 結(jié)點結(jié)構(gòu)體名數(shù)據(jù)類型1 成員名1;/*存放數(shù)據(jù)成員1*/數(shù)據(jù)類型n 成員名n;/*存放數(shù)據(jù)成員n*/struct 結(jié)點結(jié)構(gòu)體名 *指針變量名;/*用于指向下一個結(jié)點的指針變量*/15.5.2 15.5.2 單鏈表建立單鏈表建立鏈表是一種動態(tài)的數(shù)據(jù)結(jié)構(gòu),它所需要的內(nèi)存空間無法預(yù)先確定,取決于實際的應(yīng)用情況。C語言提供了一些內(nèi)存管理函數(shù)。運用這些內(nèi)存管理函數(shù)可以按需要動態(tài)地分配內(nèi)存空間,用于存放結(jié)點的數(shù)據(jù),將結(jié)點的指針把各個結(jié)點鏈接起來構(gòu)成一個鏈表,當(dāng)鏈表或者某個結(jié)點不用時可以空間回收待用,使用內(nèi)存資料得到合理的利用。15.5.2 15.5.2 單鏈表建立單鏈表建立1內(nèi)存管理系統(tǒng)函數(shù)(1)malloc( )函數(shù)(類型說
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 幼兒園幼師管理制度(3篇)
- 施工現(xiàn)場施工防毒害制度
- 2026吉林省吉勤服務(wù)集團(tuán)有限責(zé)任公司社會化招聘4人備考題庫及答案詳解參考
- 2026四川大學(xué)華西醫(yī)院基建運行部技術(shù)工人招聘2人備考題庫帶答案詳解
- 2026廣西農(nóng)業(yè)科學(xué)院甘蔗研究所甘蔗綠色高效栽培技術(shù)團(tuán)隊招聘編制外工作人員1人備考題庫及一套完整答案詳解
- 藥品銷售財務(wù)制度
- 局財務(wù)制度管理責(zé)任目標(biāo)
- 參公單位財務(wù)制度
- 糧食收購企業(yè)財務(wù)制度
- 餐飲住宿行業(yè)財務(wù)制度
- 【二下數(shù)學(xué)】計算每日一練60天(口算豎式脫式應(yīng)用題)
- 殘疾人服務(wù)與權(quán)益保護(hù)手冊(標(biāo)準(zhǔn)版)
- 車隊春節(jié)前安全培訓(xùn)內(nèi)容課件
- 2025年溫州肯恩三位一體筆試英語真題及答案
- 云南師大附中2026屆高三高考適應(yīng)性月考卷(六)歷史試卷(含答案及解析)
- PCR技術(shù)在食品中的應(yīng)用
- 輸液滲漏處理課件
- 教育培訓(xùn)行業(yè)發(fā)展趨勢與機(jī)遇分析
- 2025醫(yī)療器械經(jīng)營質(zhì)量管理體系文件(全套)(可編輯?。?/a>
- 物業(yè)與商戶裝修協(xié)議書
- 湖南鐵道職業(yè)技術(shù)學(xué)院2025年單招職業(yè)技能測試題
評論
0/150
提交評論