




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、C語言用戶自定義數(shù)據(jù)類型1第第8章章 用戶自定義數(shù)據(jù)類型用戶自定義數(shù)據(jù)類型C語言用戶自定義數(shù)據(jù)類型2本章內(nèi)容本章內(nèi)容n8.1 結(jié)構(gòu)類型及其變量的定義結(jié)構(gòu)類型及其變量的定義n8.2 結(jié)構(gòu)數(shù)組結(jié)構(gòu)數(shù)組n8.3 結(jié)構(gòu)和指針結(jié)構(gòu)和指針n8.4 聯(lián)合類型聯(lián)合類型n8.5 枚舉類型枚舉類型C語言用戶自定義數(shù)據(jù)類型3一一. 結(jié)構(gòu)類型的概念結(jié)構(gòu)類型的概念 前面的我們學(xué)習(xí)了一些簡單數(shù)據(jù)類型(整型、實(shí)前面的我們學(xué)習(xí)了一些簡單數(shù)據(jù)類型(整型、實(shí)型、字符型)的定義和應(yīng)用,還學(xué)習(xí)了數(shù)組(一維、型、字符型)的定義和應(yīng)用,還學(xué)習(xí)了數(shù)組(一維、二維)的定義和應(yīng)用,這些數(shù)據(jù)類型的特點(diǎn)是:當(dāng)定二維)的定義和應(yīng)用,這些數(shù)據(jù)類型的特
2、點(diǎn)是:當(dāng)定義某一特定數(shù)據(jù)類型,就限定該類型變量的存儲特性義某一特定數(shù)據(jù)類型,就限定該類型變量的存儲特性和取值范圍。和取值范圍。 在日常生活中,我們常會遇到一些需要填寫的登在日常生活中,我們常會遇到一些需要填寫的登記表,如成績表、通訊地址、員工信息等。其數(shù)據(jù)類記表,如成績表、通訊地址、員工信息等。其數(shù)據(jù)類型可能由性質(zhì)不同的成員組成。型可能由性質(zhì)不同的成員組成。C語言用戶自定義數(shù)據(jù)類型4結(jié)構(gòu)類型的概念結(jié)構(gòu)類型的概念numbernameSexdepartmentagewage1wage29008806Li FangFInformatio188507809008807Lin HongFPersonne
3、l169007609008808Wu QiangMTechnical189507909008809Li JunMPersonnel178807609008810Zhang Xia FTechnical17870795l上表中數(shù)據(jù)是由員工的工作證號上表中數(shù)據(jù)是由員工的工作證號(number)、姓名、姓名(name)、性別性別(sex) 、年齡、年齡(age) 、部門、部門( department) 、工資、工資(wage)等數(shù)據(jù)項(xiàng)組成的,邏輯上相關(guān)的數(shù)據(jù)。等數(shù)據(jù)項(xiàng)組成的,邏輯上相關(guān)的數(shù)據(jù)。l在在C語言中,將這種由多個不同類型的數(shù)據(jù)項(xiàng)組合在一起形成語言中,將這種由多個不同類型的數(shù)據(jù)項(xiàng)組合在一起形成
4、的數(shù)據(jù)類型,稱為結(jié)構(gòu)體類型。的數(shù)據(jù)類型,稱為結(jié)構(gòu)體類型。C語言用戶自定義數(shù)據(jù)類型5 我們可以創(chuàng)建如下的結(jié)構(gòu)類型:我們可以創(chuàng)建如下的結(jié)構(gòu)類型: struct staff 其中其中staff由用戶命名由用戶命名 char number8; char name10; char sex; int age; char dep20; float wage2; ; 以上定義了一個結(jié)構(gòu)類型以上定義了一個結(jié)構(gòu)類型struct staff(與與int 同同地位地位),它包含了它包含了number、name、sex、age、dep、wage等不同類型的數(shù)據(jù)項(xiàng)。等不同類型的數(shù)據(jù)項(xiàng)。結(jié)構(gòu)類型的概念結(jié)構(gòu)類型的概念C語言用
5、戶自定義數(shù)據(jù)類型61結(jié)構(gòu)體類型說明的一般形式結(jié)構(gòu)體類型說明的一般形式 struct 標(biāo)識符標(biāo)識符 結(jié)構(gòu)成員列表;結(jié)構(gòu)成員列表; ;說明:說明: (1) struct是關(guān)鍵字,聲明要定義一個結(jié)構(gòu)類型,結(jié)構(gòu)類是關(guān)鍵字,聲明要定義一個結(jié)構(gòu)類型,結(jié)構(gòu)類型名用標(biāo)示符命名,要型名用標(biāo)示符命名,要“見名知義見名知義”; (2)成員列表給出)成員列表給出n個成員聲明,成員可以基本類型變量、個成員聲明,成員可以基本類型變量、數(shù)組,也可以是另一結(jié)構(gòu)類型變量等,對每個成員必須作數(shù)組,也可以是另一結(jié)構(gòu)類型變量等,對每個成員必須作類型說明,成員之間用分號分隔;類型說明,成員之間用分號分隔;二二. 結(jié)構(gòu)體類型及結(jié)構(gòu)體變量
6、結(jié)構(gòu)體類型及結(jié)構(gòu)體變量C語言用戶自定義數(shù)據(jù)類型7nonamesexageclassnograde獨(dú)立的變量:獨(dú)立的變量: 數(shù)據(jù)項(xiàng)數(shù)據(jù)項(xiàng)之間之間無關(guān)聯(lián)無關(guān)聯(lián)nonamesexageclassnogradestruct student char no9; /學(xué)號學(xué)號 char name20; /姓名姓名 char sex; /性別性別 unsigned int age; /年齡年齡 unsigned int classno; /班級班級 float grade;/成績成績C語言用戶自定義數(shù)據(jù)類型8(1)對于結(jié)構(gòu)類型,系統(tǒng)不會為之分配內(nèi)存。只有在定義)對于結(jié)構(gòu)類型,系統(tǒng)不會為之分配內(nèi)存。只有在定義了
7、結(jié)構(gòu)變量后,系統(tǒng)才會分配內(nèi)存單元給變量。了結(jié)構(gòu)變量后,系統(tǒng)才會分配內(nèi)存單元給變量。(2)結(jié)構(gòu)是由若干個數(shù)據(jù)項(xiàng)組成,每個數(shù)據(jù)項(xiàng)都屬于一種)結(jié)構(gòu)是由若干個數(shù)據(jù)項(xiàng)組成,每個數(shù)據(jù)項(xiàng)都屬于一種已有定義的類型。每一個結(jié)構(gòu)成員都不是獨(dú)立的,它不是一已有定義的類型。每一個結(jié)構(gòu)成員都不是獨(dú)立的,它不是一般的變量,而是跟結(jié)構(gòu)聯(lián)系在一起。般的變量,而是跟結(jié)構(gòu)聯(lián)系在一起。struct Student int number char name9; int age; char sex; int age; char sex;同名的同名的age和和sex均均不會有命名沖突問不會有命名沖突問題題C語言用戶自定義數(shù)據(jù)類型9(3)
8、結(jié)構(gòu)類型可以嵌套定義。所謂嵌套定義是指在一結(jié)構(gòu)類型可以嵌套定義。所謂嵌套定義是指在一個結(jié)構(gòu)類型中可以包含另一個或一些結(jié)構(gòu)類型,通個結(jié)構(gòu)類型中可以包含另一個或一些結(jié)構(gòu)類型,通常用于結(jié)構(gòu)類型的成員是一個結(jié)構(gòu)變量的場合。常用于結(jié)構(gòu)類型的成員是一個結(jié)構(gòu)變量的場合。namebirthdaysexmonthdayyear結(jié)構(gòu)類型的幾點(diǎn)說明結(jié)構(gòu)類型的幾點(diǎn)說明C語言用戶自定義數(shù)據(jù)類型10結(jié)構(gòu)類型的幾點(diǎn)說明結(jié)構(gòu)類型的幾點(diǎn)說明struct Student char name9; struct Birthday int year; int month; int day; birthday; char sex;str
9、uct Student int number char name9; int age; char sex;C語言用戶自定義數(shù)據(jù)類型11(4)允許省略結(jié)構(gòu)類型名,即允許定義無類型名的結(jié)構(gòu)類)允許省略結(jié)構(gòu)類型名,即允許定義無類型名的結(jié)構(gòu)類型。型。struct int year; int month; int day; birthday; 無名的結(jié)構(gòu)類型無名的結(jié)構(gòu)類型必 須 后 隨 結(jié) 構(gòu) 變 量必 須 后 隨 結(jié) 構(gòu) 變 量(如(如birthday)的定義,的定義,并且僅能一處使用,并且僅能一處使用,這種形式通常用于內(nèi)這種形式通常用于內(nèi)嵌在結(jié)構(gòu)類型中的結(jié)嵌在結(jié)構(gòu)類型中的結(jié)構(gòu)類型。構(gòu)類型。(5)可以
10、用)可以用sizeof運(yùn)算符來計(jì)算結(jié)構(gòu)類型的長度(字節(jié)數(shù))運(yùn)算符來計(jì)算結(jié)構(gòu)類型的長度(字節(jié)數(shù))例如:例如:printf(“%d”,sizeof(struct Student); 結(jié)果為結(jié)果為18結(jié)構(gòu)類型的幾點(diǎn)說明結(jié)構(gòu)類型的幾點(diǎn)說明C語言用戶自定義數(shù)據(jù)類型12 1.結(jié)構(gòu)類型數(shù)據(jù)對象包括一般變量、指針、數(shù)組等,對結(jié)構(gòu)類型數(shù)據(jù)對象包括一般變量、指針、數(shù)組等,對于成為結(jié)構(gòu)變量、結(jié)構(gòu)指針、結(jié)構(gòu)數(shù)組等可以在說明語句中于成為結(jié)構(gòu)變量、結(jié)構(gòu)指針、結(jié)構(gòu)數(shù)組等可以在說明語句中用已定義的結(jié)構(gòu)類型定義結(jié)構(gòu)數(shù)據(jù)對象,也可以在定義結(jié)構(gòu)用已定義的結(jié)構(gòu)類型定義結(jié)構(gòu)數(shù)據(jù)對象,也可以在定義結(jié)構(gòu)類型的同時定義結(jié)構(gòu)數(shù)據(jù)對象。類型的同
11、時定義結(jié)構(gòu)數(shù)據(jù)對象。struct date int month; int day; int year; ;struct staff char number8; struct date birthday; char sex; ; 定義了結(jié)構(gòu)類型之后定義了結(jié)構(gòu)類型之后, 還必須定義結(jié)構(gòu)類型變量還必須定義結(jié)構(gòu)類型變量, 類型與變量類型與變量是不同的概念。是不同的概念。C語言用戶自定義數(shù)據(jù)類型132結(jié)構(gòu)類型變量的三種定義方式結(jié)構(gòu)類型變量的三種定義方式 (1) 在說明結(jié)構(gòu)類型的同時在說明結(jié)構(gòu)類型的同時, 也定義了結(jié)構(gòu)類型變量也定義了結(jié)構(gòu)類型變量例如:例如: struct book int num; ch
12、ar name60; float price; book1, books3;n在說明結(jié)構(gòu)類型名在說明結(jié)構(gòu)類型名struct book的同時的同時,定義了結(jié)構(gòu)類型變定義了結(jié)構(gòu)類型變量量book1與結(jié)構(gòu)類型數(shù)組與結(jié)構(gòu)類型數(shù)組books, 數(shù)組數(shù)組books有三個元素:有三個元素:books0、books1、books2。結(jié)構(gòu)類型數(shù)據(jù)對象的定義及初始化結(jié)構(gòu)類型數(shù)據(jù)對象的定義及初始化C語言用戶自定義數(shù)據(jù)類型14(2) 先說明結(jié)構(gòu)類型先說明結(jié)構(gòu)類型, 再單獨(dú)進(jìn)再單獨(dú)進(jìn)行變量定義行變量定義例如:例如:struct staff char name10; char sex; float wage2; ; .s
13、truct staff worker1, worker2;(3) 省略結(jié)構(gòu)標(biāo)識符省略結(jié)構(gòu)標(biāo)識符, 直接定義直接定義變量變量例如:例如:struct /* 此處沒有標(biāo)識符此處沒有標(biāo)識符*/ int month; char day; unsigned year; d5; 沒有標(biāo)識符一定要在定義沒有標(biāo)識符一定要在定義結(jié)構(gòu)類型的同時定義變量。結(jié)構(gòu)類型的同時定義變量。結(jié)構(gòu)類型數(shù)據(jù)對象的定義及初始化結(jié)構(gòu)類型數(shù)據(jù)對象的定義及初始化C語言用戶自定義數(shù)據(jù)類型15 定義了結(jié)構(gòu)類型定義了結(jié)構(gòu)類型: struce Student 后定義不同變量的區(qū)后定義不同變量的區(qū)別別:struce Student s1, s210
14、0, * *s3=&s1, * *s4=s2; 從上面可以看出從上面可以看出: (1) s1是該類型的變量是該類型的變量, s2是該類型的一維數(shù)組是該類型的一維數(shù)組, s3, s4 是指向該類型變量的結(jié)構(gòu)指針是指向該類型變量的結(jié)構(gòu)指針; (2) 結(jié)構(gòu)類型的變量名不是地址結(jié)構(gòu)類型的變量名不是地址. 結(jié)構(gòu)類型數(shù)據(jù)對象的定義及初始化結(jié)構(gòu)類型數(shù)據(jù)對象的定義及初始化C語言用戶自定義數(shù)據(jù)類型163. 結(jié)構(gòu)類型變量的初始化結(jié)構(gòu)類型變量的初始化可以在定義結(jié)構(gòu)類型變量的同時對其初始化,其語法可以在定義結(jié)構(gòu)類型變量的同時對其初始化,其語法格式:格式:struct 標(biāo)識符標(biāo)識符 結(jié)構(gòu)變量名結(jié)構(gòu)變量名=成員初始化值表
15、成員初始化值表struct Student int number char name9; struct int year; int month; int day; birthday; char sex;student1=1101,”lilin”,1985,8,1,M;C語言用戶自定義數(shù)據(jù)類型17 定義了結(jié)構(gòu)數(shù)據(jù)對象,就可以訪問其中的每一個成員。定義了結(jié)構(gòu)數(shù)據(jù)對象,就可以訪問其中的每一個成員。結(jié)構(gòu)成員可以像基本變量那樣使用,如賦值、輸入輸出、參結(jié)構(gòu)成員可以像基本變量那樣使用,如賦值、輸入輸出、參加表達(dá)式的計(jì)算等,這些操作統(tǒng)稱為對結(jié)構(gòu)成員的訪問。加表達(dá)式的計(jì)算等,這些操作統(tǒng)稱為對結(jié)構(gòu)成員的訪問。1
16、、結(jié)構(gòu)成員的表示、結(jié)構(gòu)成員的表示 結(jié)構(gòu)變量是由結(jié)構(gòu)變量是由n個成員聚合而成的一個整體,要訪問其個成員聚合而成的一個整體,要訪問其中的一個成員,必須同時給出整體的名稱和個體成員的名稱。中的一個成員,必須同時給出整體的名稱和個體成員的名稱。 struct Student s1,s2100,* *s3=&s1; s1是結(jié)構(gòu)變量,用來存放單個學(xué)生的信息是結(jié)構(gòu)變量,用來存放單個學(xué)生的信息 s2是結(jié)構(gòu)數(shù)組,該數(shù)組包含是結(jié)構(gòu)數(shù)組,該數(shù)組包含100個類型是個類型是struct Student 的成員,這樣的數(shù)組可以表示一個學(xué)生情況的成員,這樣的數(shù)組可以表示一個學(xué)生情況 s3是結(jié)構(gòu)指針,存放是結(jié)構(gòu)指針,存放st
17、ruct Student 類型數(shù)據(jù)對象類型數(shù)據(jù)對象s1的內(nèi)存首地址。的內(nèi)存首地址。C語言用戶自定義數(shù)據(jù)類型18(1)結(jié)構(gòu)變量成員的表示)結(jié)構(gòu)變量成員的表示: 結(jié)構(gòu)變量結(jié)構(gòu)變量 . 成員名成員名 (如如 s1.number、s1.age)(2)結(jié)構(gòu)數(shù)組元素成員的表示)結(jié)構(gòu)數(shù)組元素成員的表示 結(jié)構(gòu)數(shù)組名結(jié)構(gòu)數(shù)組名下標(biāo)表達(dá)式下標(biāo)表達(dá)式.成員名成員名 表示表示s2的第六個元素(結(jié)構(gòu)變量)之的第六個元素(結(jié)構(gòu)變量)之name成員成員 (3)結(jié)構(gòu)指針成員的表示)結(jié)構(gòu)指針成員的表示 結(jié)構(gòu)指針結(jié)構(gòu)指針-成員名成員名 (如如 s3-sex) 或或 (* *結(jié)構(gòu)指針結(jié)構(gòu)指針). 成員名成員名 (如
18、如 (* *s3).sex) 對于多層嵌套結(jié)構(gòu)成員對于多層嵌套結(jié)構(gòu)成員, 有多個有多個“”,從外向內(nèi)。,從外向內(nèi)。結(jié)構(gòu)成員的引用結(jié)構(gòu)成員的引用C語言用戶自定義數(shù)據(jù)類型192. 成員運(yùn)算符成員運(yùn)算符 兩種成員運(yùn)算符:兩種成員運(yùn)算符:“.”和和“-” 結(jié)構(gòu)成員本身又是結(jié)構(gòu)變量,稱為嵌套結(jié)構(gòu)。必須使用若結(jié)構(gòu)成員本身又是結(jié)構(gòu)變量,稱為嵌套結(jié)構(gòu)。必須使用若干個成員運(yùn)算符來連接多個結(jié)構(gòu)變量及其對應(yīng)的分量,逐級干個成員運(yùn)算符來連接多個結(jié)構(gòu)變量及其對應(yīng)的分量,逐級表示到最低一級成員,該級成員是可以直接訪問的基本數(shù)據(jù)表示到最低一級成員,該級成員是可以直接訪問的基本數(shù)據(jù)對象。對象。 注意:只能對最內(nèi)層的成員進(jìn)行存
19、取、運(yùn)算以及輸入、輸注意:只能對最內(nèi)層的成員進(jìn)行存取、運(yùn)算以及輸入、輸出等操作出等操作結(jié)構(gòu)成員的引用結(jié)構(gòu)成員的引用C語言用戶自定義數(shù)據(jù)類型20 結(jié)構(gòu)變量的成員可以像普通變量一樣進(jìn)行各種運(yùn)算,如賦結(jié)構(gòu)變量的成員可以像普通變量一樣進(jìn)行各種運(yùn)算,如賦值、輸入、輸出、計(jì)算及地址操作等,例如:值、輸入、輸出、計(jì)算及地址操作等,例如: student1.birthday.year+; student.number=11001; scanf(“%d) 將變量中的將變量中的sex的地址作為參數(shù)傳遞給的地址作為參數(shù)傳遞給scanf函數(shù),以輸函數(shù),以輸入入sex的值的值結(jié)構(gòu)成員的引用結(jié)構(gòu)成員的引用C語言用戶自定義
20、數(shù)據(jù)類型215、結(jié)構(gòu)成員表示和引用的注意事項(xiàng)、結(jié)構(gòu)成員表示和引用的注意事項(xiàng)(1)如果成員是基本類型數(shù)據(jù)則可以直接引用;)如果成員是基本類型數(shù)據(jù)則可以直接引用; (2)在絕對多數(shù)場合(賦值運(yùn)算除外),只能訪問成員而)在絕對多數(shù)場合(賦值運(yùn)算除外),只能訪問成員而不能直接訪問結(jié)構(gòu)本身。不能直接訪問結(jié)構(gòu)本身。 struct Student student1,student2 student1=student1+student1; printf(“%d,%s,%d,%cn“,student1); printf(“%d,%s,%d,%c,%fn”,student1.number,student1.nam
21、e,student1.age,student1.sex);Scanf(“%d,%s,%d,%c,%f”,&student1);printf(%o,student1);輸出);輸出student1的首地址的首地址C語言用戶自定義數(shù)據(jù)類型22(3)可以將一個結(jié)構(gòu)變量作為一個整體賦給另一個具有相同)可以將一個結(jié)構(gòu)變量作為一個整體賦給另一個具有相同類型的結(jié)構(gòu)變量,其作用相當(dāng)于逐個對位于賦值語句左部類型的結(jié)構(gòu)變量,其作用相當(dāng)于逐個對位于賦值語句左部的結(jié)構(gòu)變量的每個分量賦值。如:的結(jié)構(gòu)變量的每個分量賦值。如: student2=student1; 等效于:等效于: student2.number=stud
22、ent1.number; strcpy(,); student2.sex=student1.sex; 也可以把一個結(jié)構(gòu)變量中的內(nèi)嵌結(jié)構(gòu)類型成員賦給另一個也可以把一個結(jié)構(gòu)變量中的內(nèi)嵌結(jié)構(gòu)類型成員賦給另一個結(jié)構(gòu)變量的對應(yīng)得內(nèi)嵌結(jié)構(gòu)類型成員,例如結(jié)構(gòu)變量的對應(yīng)得內(nèi)嵌結(jié)構(gòu)類型成員,例如 student2.birthday1=student1.birthday1;(4)不允許將一組常量直接賦給一個結(jié)構(gòu)變量。如:)不允許將一組常量直接賦給一個結(jié)構(gòu)變量。如: student2=“l(fā)ili”,18,M,12,15,1978,010001,89; C語言用戶自
23、定義數(shù)據(jù)類型23例例8.3 試分析以下程序的執(zhí)行結(jié)果:試分析以下程序的執(zhí)行結(jié)果:#include struct Birthday int m; int d; int y;void main()struct Student student1=1001,lili,18,M,12,15,1982,student2; student2=student1; printf(student1:%ld %s %d %c %d/%d/%dn,student1.num,, student1.age,student1.sex,student1.birthday1.m,student1.bi
24、rthday1.d, student1.birthday1.y);printf(student2:%ld %s %d %c %d/%d/%dn,student2.num,, student2.age,student2.sex,student2.birthday1.m,student2.birthday1.d, student2.birthday1.y); struct Student long num; char name10; int age; char sex; struct Birthday birthday1;C語言用戶自定義數(shù)據(jù)類型24補(bǔ)充例補(bǔ)充例 若有以下
25、定義,則正確的賦值語句為若有以下定義,則正確的賦值語句為( )。struct date2 long i; char c; two;struct date1 int cat; struct date2 three; one;(A) one.three.c=A; (B) one.two.three.c=A;(C) three.c=A;(D) one.c=A;C語言用戶自定義數(shù)據(jù)類型25 一個結(jié)構(gòu)體變量中可以存放一組數(shù)據(jù)(如一個一個結(jié)構(gòu)體變量中可以存放一組數(shù)據(jù)(如一個學(xué)生的學(xué)號、姓名、成績等數(shù)據(jù))。如果有個學(xué)生的學(xué)號、姓名、成績等數(shù)據(jù))。如果有個學(xué)生的數(shù)據(jù)需要參加運(yùn)算,顯然應(yīng)該用數(shù)組,這就學(xué)生的數(shù)據(jù)
26、需要參加運(yùn)算,顯然應(yīng)該用數(shù)組,這就是結(jié)構(gòu)體數(shù)組。結(jié)構(gòu)體數(shù)組與以前介紹過的數(shù)值型是結(jié)構(gòu)體數(shù)組。結(jié)構(gòu)體數(shù)組與以前介紹過的數(shù)值型數(shù)組不同之處在于每個數(shù)組元素都是一個結(jié)構(gòu)體類數(shù)組不同之處在于每個數(shù)組元素都是一個結(jié)構(gòu)體類型的數(shù)據(jù),它們都分別包括各個成員(分量)項(xiàng)。型的數(shù)據(jù),它們都分別包括各個成員(分量)項(xiàng)。 C語言用戶自定義數(shù)據(jù)類型261、結(jié)構(gòu)數(shù)組的定義、結(jié)構(gòu)數(shù)組的定義 結(jié)構(gòu)數(shù)組是基類型為結(jié)構(gòu)類型的數(shù)組。它既有結(jié)構(gòu)變量結(jié)構(gòu)數(shù)組是基類型為結(jié)構(gòu)類型的數(shù)組。它既有結(jié)構(gòu)變量的屬性,又有數(shù)組的屬性,這樣對于成批的結(jié)構(gòu)化數(shù)據(jù),比的屬性,又有數(shù)組的屬性,這樣對于成批的結(jié)構(gòu)化數(shù)據(jù),比如學(xué)生數(shù)據(jù)或職工數(shù)據(jù),既便于表示和存
27、儲又便于采用循環(huán)如學(xué)生數(shù)據(jù)或職工數(shù)據(jù),既便于表示和存儲又便于采用循環(huán)語句實(shí)現(xiàn)重復(fù)處理。語句實(shí)現(xiàn)重復(fù)處理。 定義結(jié)構(gòu)數(shù)組的語法格式:定義結(jié)構(gòu)數(shù)組的語法格式: struct 標(biāo)識符標(biāo)識符 數(shù)組名數(shù)組名常量表達(dá)式常量表達(dá)式;或或 struct 標(biāo)識符標(biāo)識符 成員表成員表 數(shù)組名數(shù)組名常量表達(dá)式常量表達(dá)式; C語言用戶自定義數(shù)據(jù)類型27結(jié)構(gòu)數(shù)組的定義及其應(yīng)用結(jié)構(gòu)數(shù)組的定義及其應(yīng)用l后定義后定義struct child char initial;int age;int grade; struct child boy30;l同時定義同時定義struct child char initial;int age
28、;int grade; boy30;l直接定義直接定義struct char initial;int age;int grade; boy30;C語言用戶自定義數(shù)據(jù)類型282、結(jié)構(gòu)數(shù)組的初始化、結(jié)構(gòu)數(shù)組的初始化Struct Student student2=1101,”lilin”,1985,8,1,M, 1102,”wangjing”,1985,7,1,F;Struct Student student =1101,”lilin”,1985,8,1,M, 1102,”wangjing”,1985,7,1,F;數(shù)組的下標(biāo)說明會省略數(shù)組的下標(biāo)說明會省略Student0Student1結(jié)構(gòu)數(shù)組的定義
29、及其應(yīng)用結(jié)構(gòu)數(shù)組的定義及其應(yīng)用C語言用戶自定義數(shù)據(jù)類型291、引用結(jié)構(gòu)數(shù)組元素、引用結(jié)構(gòu)數(shù)組元素 數(shù)組名數(shù)組名下標(biāo)表達(dá)式下標(biāo)表達(dá)式或或* *(數(shù)組名數(shù)組名+i) 如:如:employee2、* *(employee+i)2、引用結(jié)構(gòu)數(shù)組元素的成員、引用結(jié)構(gòu)數(shù)組元素的成員 employee4.salary注意:注意:(1)可以像基本變量那樣使用,如賦值、輸出、計(jì)算等)可以像基本變量那樣使用,如賦值、輸出、計(jì)算等 scanf(“%s%c”, , &employee0.sex); (2)不能將結(jié)構(gòu)數(shù)組元素作為一個整體進(jìn)行輸入或輸出,但可)不能
30、將結(jié)構(gòu)數(shù)組元素作為一個整體進(jìn)行輸入或輸出,但可以將結(jié)構(gòu)數(shù)組元素作為一個整體進(jìn)行賦值操作以將結(jié)構(gòu)數(shù)組元素作為一個整體進(jìn)行賦值操作 printf(“%d”,employee0);scanf(“%d”,&employee0); employee0=employee1 C語言用戶自定義數(shù)據(jù)類型30對結(jié)構(gòu)數(shù)組的操作對結(jié)構(gòu)數(shù)組的操作struct child char initial;int age;int grade; ;struct child boy2=a,5,3,b,4,2;boy1.age+;printf(“%d”,boy1.age)C語言用戶自定義數(shù)據(jù)類型31對結(jié)構(gòu)數(shù)組的操作對結(jié)構(gòu)數(shù)組的操作例:
31、例:struct student int num; char name20; char sex; int age; char addr30; a5; a0. num=060001;a1. name=Lin Hong;l一個結(jié)構(gòu)體數(shù)組元素一個結(jié)構(gòu)體數(shù)組元素相當(dāng)于一個結(jié)構(gòu)體變量,相當(dāng)于一個結(jié)構(gòu)體變量,其處理方法與結(jié)構(gòu)體變其處理方法與結(jié)構(gòu)體變量的處理方法相同量的處理方法相同 C語言用戶自定義數(shù)據(jù)類型32對結(jié)構(gòu)數(shù)組的操作對結(jié)構(gòu)數(shù)組的操作例:例:struct student int num; char name20; char sex; int age; char addr30; a5; gets(a0
32、.name);scanf(%c,&a0.sex);scanf(%d,&a0.age);a3 = a0 ;printf(%s,&);C語言用戶自定義數(shù)據(jù)類型33對結(jié)構(gòu)數(shù)組的操作對結(jié)構(gòu)數(shù)組的操作3、結(jié)構(gòu)數(shù)組應(yīng)用實(shí)例、結(jié)構(gòu)數(shù)組應(yīng)用實(shí)例計(jì)算學(xué)生的平均年齡計(jì)算學(xué)生的平均年齡#include struct student int number; char name20; int age;stu4=1011,li li,21, 1022,li hong,23, 1023,wang ping,22, 1024,zhang san,22 ;void main()int i=0; float ave
33、,s=0; for(i=0;i4;i+) s+=stui.age; printf(s=%fn,s); ave=s/4; printf(average age=%fn,ave);C語言用戶自定義數(shù)據(jù)類型34void main() struct Device array=A, 0, B, 0, C, 0; int i, j; char device_type; for(i=1; i=N; i+) scanf(%c,&device_type); for(j=0; j3; j+) if(device_type=arrayj.type) arrayj.count+; for(i=0; i3; i+) p
34、rintf(type=%c,count=%dn, arrayi.type, arrayi.count);#include #define N 10 /*設(shè)備數(shù)量設(shè)備數(shù)量*/struct Device char type; int count;C語言用戶自定義數(shù)據(jù)類型35n結(jié)構(gòu)變量在內(nèi)存中的起始地址稱為結(jié)構(gòu)變量的指結(jié)構(gòu)變量在內(nèi)存中的起始地址稱為結(jié)構(gòu)變量的指針(簡稱結(jié)構(gòu)指針)。針(簡稱結(jié)構(gòu)指針)。n我們可以聲明一個指針變量,用來存放該地址,我們可以聲明一個指針變量,用來存放該地址,那么它就指向一個結(jié)構(gòu)變量。那么它就指向一個結(jié)構(gòu)變量。n引入結(jié)構(gòu)指針的主要目的是實(shí)現(xiàn)結(jié)構(gòu)變量的動態(tài)引入結(jié)構(gòu)指針的主要目的
35、是實(shí)現(xiàn)結(jié)構(gòu)變量的動態(tài)存儲分配以及函數(shù)之間的雙向數(shù)據(jù)傳遞。存儲分配以及函數(shù)之間的雙向數(shù)據(jù)傳遞。n當(dāng)然,結(jié)構(gòu)變量的成員也可以使指針,甚至可以當(dāng)然,結(jié)構(gòu)變量的成員也可以使指針,甚至可以是指向相同類型結(jié)構(gòu)變量的指針,這是構(gòu)造鏈表是指向相同類型結(jié)構(gòu)變量的指針,這是構(gòu)造鏈表的基礎(chǔ)。的基礎(chǔ)。C語言用戶自定義數(shù)據(jù)類型36struct 結(jié)構(gòu)體名結(jié)構(gòu)體名 *結(jié)構(gòu)體指針名結(jié)構(gòu)體指針名;例例 struct child *p;存放結(jié)構(gòu)體變量在存放結(jié)構(gòu)體變量在內(nèi)存的起始地址內(nèi)存的起始地址struct child char initial;int age;int grade;boy ;struct child *p=&bo
36、yinitialagegradeboypC語言用戶自定義數(shù)據(jù)類型37指向結(jié)構(gòu)變量的指針指向結(jié)構(gòu)變量的指針2. 結(jié)構(gòu)指針的初始化結(jié)構(gòu)指針的初始化struct child char initial;int age;int grade;boy, *p1, *p2;p1 = &boy;p2 = NULL;struct child *p = &boy;C語言用戶自定義數(shù)據(jù)類型38指向運(yùn)算符指向運(yùn)算符優(yōu)先級優(yōu)先級: 1結(jié)合方向:從左向右結(jié)合方向:從左向右例例 int n; int *p=&n; *p=10; n=10struct student stu1;struct student *p=&stu1;=
37、101; (*p).num=101(1)(*結(jié)構(gòu)體指針結(jié)構(gòu)體指針).成員名成員名 例如:例如:(* p).num(2)結(jié)構(gòu)體指針)結(jié)構(gòu)體指針-成員名成員名 例如:例如:p- numC語言用戶自定義數(shù)據(jù)類型39#include #include struct Studentlong num; char name20; int age; char sex;void main() struct Student student,*p; p=&student; strcpy(,wang li); student.num=89101; student.age=18; student
38、.sex=M; printf(nname:%snnumber:%ldnage:%dnsex:%cn,,student.num, student.age,student.sex); printf(nname:%snnumber:%ldnage:%dnsex:%cn,(*p).name,(*p).num, (*p).age,(*p).sex);printf(nname:%snnumber:%ldnage:%dnsex:%cn“,p-name,p-num, p-age,p-sex);C語言用戶自定義數(shù)據(jù)類型40#include struct Studentint number
39、; char *name; ;void main() struct Student stu=1101,lili;printf(%sn,);C語言用戶自定義數(shù)據(jù)類型41指針變量作為結(jié)構(gòu)成員指針變量作為結(jié)構(gòu)成員#include struct Studentint number; char *name; ;void main() struct Student stu; scanf(%d,&stu.number); =(char *)calloc(21,sizeof(char); scanf(%s,); printf(%sn,stu.number);pr
40、intf(%sn,); 指針變量如果沒有初始化,指針變量如果沒有初始化,它的指向是不確定的,也即不它的指向是不確定的,也即不可用。必須調(diào)用可用。必須調(diào)用calloc函數(shù)為函數(shù)為其申請內(nèi)存空間其申請內(nèi)存空間C語言用戶自定義數(shù)據(jù)類型42指針變量作為結(jié)構(gòu)成員指針變量作為結(jié)構(gòu)成員1. 指針類型的成員變量要賦值時需分配內(nèi)存空間指針類型的成員變量要賦值時需分配內(nèi)存空間2.如果變量的空間分配通過內(nèi)存分配函數(shù)完成,最后還要釋如果變量的空間分配通過內(nèi)存分配函數(shù)完成,最后還要釋放這塊內(nèi)存區(qū)域。放這塊內(nèi)存區(qū)域。l介紹三個存儲管理庫函數(shù),原型說明在介紹三個存儲管理庫函數(shù),原型說明在 “”“”頭文件中,
41、使頭文件中,使用包含到源程序中用包含到源程序中 動態(tài)分配存儲區(qū)函數(shù)動態(tài)分配存儲區(qū)函數(shù)malloc( ) 函數(shù)原型:函數(shù)原型:void *malloc(unsigned size); 調(diào)用格式:調(diào)用格式:malloc(size) 功能:在內(nèi)存分配一個功能:在內(nèi)存分配一個size字節(jié)的存儲區(qū)。調(diào)用字節(jié)的存儲區(qū)。調(diào)用 結(jié)果為新分配的存儲區(qū)的首地址,是一個結(jié)果為新分配的存儲區(qū)的首地址,是一個void 類型指針。若分配失敗,則返回類型指針。若分配失敗,則返回NULL(即(即0)。)。C語言用戶自定義數(shù)據(jù)類型43指針變量作為結(jié)構(gòu)成員指針變量作為結(jié)構(gòu)成員 動態(tài)分配存儲區(qū)函數(shù)動態(tài)分配存儲區(qū)函數(shù)calloc(
42、) 函數(shù)原型:函數(shù)原型: void *calloc(unsigned int n,unsigned int size); 調(diào)用格式:調(diào)用格式:calloc(n,size) 功能:在內(nèi)存分配一個功能:在內(nèi)存分配一個n倍倍size字節(jié)的存儲區(qū)。字節(jié)的存儲區(qū)。調(diào)用結(jié)果為新分配的存儲區(qū)的首地址,是一個調(diào)用結(jié)果為新分配的存儲區(qū)的首地址,是一個void類型指針。若分配失敗,則返回類型指針。若分配失敗,則返回NULL(即(即0)。)。C語言用戶自定義數(shù)據(jù)類型44指針變量作為結(jié)構(gòu)成員指針變量作為結(jié)構(gòu)成員 釋放動態(tài)分配存儲區(qū)函數(shù)釋放動態(tài)分配存儲區(qū)函數(shù)free( ) 函數(shù)原型:函數(shù)原型:void free(voi
43、d *p); 實(shí)參必須是一個指向動態(tài)分配存儲區(qū)實(shí)參必須是一個指向動態(tài)分配存儲區(qū)的指針,它可以是任何類型的指針變量。的指針,它可以是任何類型的指針變量。調(diào)用格式:調(diào)用格式:free(p)功能:釋放功能:釋放p所指向的動態(tài)分配的存儲區(qū)。所指向的動態(tài)分配的存儲區(qū)。C語言用戶自定義數(shù)據(jù)類型45 可以定義一個結(jié)構(gòu)指可以定義一個結(jié)構(gòu)指針指向一個結(jié)構(gòu)數(shù)組,也就針指向一個結(jié)構(gòu)數(shù)組,也就可以利用該指針間接訪問結(jié)可以利用該指針間接訪問結(jié)構(gòu)數(shù)組的元素。構(gòu)數(shù)組的元素。Struct A int a; float b; arr3,*p;p=arr;11.52.523.53arr0arr1arr2parr11.52.523
44、.53arr0arr1arr2parrC語言用戶自定義數(shù)據(jù)類型46指向結(jié)構(gòu)數(shù)組的指針指向結(jié)構(gòu)數(shù)組的指針(1)p-a; 得到得到p指向的結(jié)構(gòu)數(shù)組元素中的成員指向的結(jié)構(gòu)數(shù)組元素中的成員a的值的值(2)( p+)-a; 先得到先得到p指向的結(jié)構(gòu)數(shù)組元素中的成員指向的結(jié)構(gòu)數(shù)組元素中的成員a的值,然后再對的值,然后再對p指針加指針加1(3)(+ p)-a; 先讓先讓p指針加指針加1,然后得到,然后得到p指向的結(jié)構(gòu)數(shù)組元素中的成員指向的結(jié)構(gòu)數(shù)組元素中的成員a的值的值(4)( p-a)+;先得到先得到p指向的結(jié)構(gòu)數(shù)組元素中的成員指向的結(jié)構(gòu)數(shù)組元素中的成員a的值,然后再對得到的值,然后再對得到的值加的值加1C
45、語言用戶自定義數(shù)據(jù)類型47#include struct Studentint num; char name20; char sex; int age; ; struct Student stu2=10101,li lin,M,18,10102,zhang fan,M,19;void main() struct Student *p; clrscr(); printf(No. name sex agen); for(p=stu;pnum,p-name, p-sex,p-age);C語言用戶自定義數(shù)據(jù)類型481結(jié)構(gòu)體變量作為函數(shù)的形參的三種形式:結(jié)構(gòu)體變量作為函數(shù)的形參的三種形式:(1)以結(jié)構(gòu)體
46、變量的成員作為參數(shù),傳遞結(jié)構(gòu)體)以結(jié)構(gòu)體變量的成員作為參數(shù),傳遞結(jié)構(gòu)體變量的成員的值。變量的成員的值。(2)以結(jié)構(gòu)體變量作為參數(shù),直接傳遞結(jié)構(gòu)體變)以結(jié)構(gòu)體變量作為參數(shù),直接傳遞結(jié)構(gòu)體變量的值。量的值。 結(jié)構(gòu)變量整體傳送,即將實(shí)參結(jié)構(gòu)體變量的各結(jié)構(gòu)變量整體傳送,即將實(shí)參結(jié)構(gòu)體變量的各個成員的值逐個傳遞給形參結(jié)構(gòu)體變量的對應(yīng)成個成員的值逐個傳遞給形參結(jié)構(gòu)體變量的對應(yīng)成員。員。 注意,實(shí)參與形參必須是相同結(jié)構(gòu)體類型的變注意,實(shí)參與形參必須是相同結(jié)構(gòu)體類型的變量。量。(3)以結(jié)構(gòu)體指針作為參數(shù),傳遞結(jié)構(gòu)體變量的)以結(jié)構(gòu)體指針作為參數(shù),傳遞結(jié)構(gòu)體變量的地址。地址。C語言用戶自定義數(shù)據(jù)類型49例例8.1
47、0:輸出學(xué)生的姓名與年齡:輸出學(xué)生的姓名與年齡struct Student int num; char name20; int age; void age(struct Student *p) printf(%sn,p-name); printf(%dn, p-age);void main() struct Student stu3 = 101, kiki,23, 102, mimi,24, 103, nana, 23 ; struct Student *p; p = &stu0; age(p+1);C語言用戶自定義數(shù)據(jù)類型50例例: 計(jì)算三個學(xué)生的總分和平均分計(jì)算三個學(xué)生的總分和平均分(利用
48、結(jié)構(gòu)指針利用結(jié)構(gòu)指針)。main() struct stu char name10; float score; stu3=Mary, 76, John, 85, Tom, 81, *p=stu; int i; float sum=0; for (i=1; iscore; p+; printf(%5.2f, %5.2f n, sum, sum/3); getch();C語言用戶自定義數(shù)據(jù)類型51結(jié)構(gòu)類型的應(yīng)用結(jié)構(gòu)類型的應(yīng)用例:定義一個包括年、月、日成員的結(jié)構(gòu)類型變量,輸入例:定義一個包括年、月、日成員的結(jié)構(gòu)類型變量,輸入一個符合常規(guī)的日期,算出該日期是這一年中的第幾一個符合常規(guī)的日期,算出該日期
49、是這一年中的第幾天并輸出。天并輸出?!痉治觥窟@里主要存在一個閏年問題,也就是當(dāng)該年為閏【分析】這里主要存在一個閏年問題,也就是當(dāng)該年為閏年時,二月份有年時,二月份有29天,其余為天,其余為28天。判斷該年是否為天。判斷該年是否為閏年的條件是:年份是否能被閏年的條件是:年份是否能被4整除,但不能整除,但不能100整除;整除;或能被或能被400整除;當(dāng)然還要判斷輸入的日期是否有效整除;當(dāng)然還要判斷輸入的日期是否有效以及各月的天數(shù)情況。以及各月的天數(shù)情況。C語言用戶自定義數(shù)據(jù)類型52結(jié)構(gòu)類型的應(yīng)用結(jié)構(gòu)類型的應(yīng)用main() struct unsigned year, month, day; x; i
50、nt maxday=0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31; int i, n=0; /* n為天數(shù)為天數(shù) */ do printf(請輸入年請輸入年 月月 日日:); scanf(%d%d%d, &x.year, &x.month, &x.day); if (x.year%4=0 & x.year%100!=0) | (x.year%400=0) maxday2=29; while (x.year0|x.month12|x.daymaxdayx.month); for (i=1; iage (B) (*+p). age (C) (*
51、p+). age (D) *(+p)- age C語言用戶自定義數(shù)據(jù)類型54課課 堂堂 練練 習(xí)習(xí)3若定義如下結(jié)構(gòu),則能打印出字母若定義如下結(jié)構(gòu),則能打印出字母M的語句是(的語句是( )。)。struct person char name9; int age;struct person class10=Wujun, 20, Liudan, 23, Maling, 21, zhangming, 22; (A) printf(%cn, ); (B) printf(%cn, 0); (C) printf(%cn, 1); (D) pr
52、intf(%cn, 1);C語言用戶自定義數(shù)據(jù)類型551聯(lián)合類型的概念:聯(lián)合類型的概念: 將若干個變量組織在一起,使它們能將若干個變量組織在一起,使它們能在不同的時間占用同一段內(nèi)存空間,這種數(shù)據(jù)組合對應(yīng)得數(shù)在不同的時間占用同一段內(nèi)存空間,這種數(shù)據(jù)組合對應(yīng)得數(shù)據(jù)類型稱為聯(lián)合類型或共同體類型。據(jù)類型稱為聯(lián)合類型或共同體類型。 union 聯(lián)合類型名聯(lián)合類型名 (union是是C語言關(guān)鍵字語言關(guān)鍵字) 成員列表成員列表; ;C語言用戶自定義數(shù)據(jù)類型56例如:例如: union abc (union是是C語言關(guān)鍵字語言關(guān)鍵字) char ch; int i; float f; v
53、; 以上說明了一個聯(lián)合類型以上說明了一個聯(lián)合類型: union abc, 同時定義一個同時定義一個聯(lián)合類型變量聯(lián)合類型變量v。 內(nèi)存高地址內(nèi)存高地址 內(nèi)存低地址內(nèi)存低地址符變量符變量ch 占占1字節(jié)字節(jié) 整型變量整型變量 i 占占2字節(jié)字節(jié)單精度實(shí)型變量單精度實(shí)型變量f占占4字節(jié)字節(jié) 聯(lián)合的概念及聯(lián)合類型定義聯(lián)合的概念及聯(lián)合類型定義C語言用戶自定義數(shù)據(jù)類型57union 聯(lián)合體類型名聯(lián)合體類型名 數(shù)據(jù)類型名數(shù)據(jù)類型名1 成員名成員名1; 數(shù)據(jù)類型名數(shù)據(jù)類型名2 成員名成員名2; ;類型定義不分配內(nèi)存類型定義不分配內(nèi)存p 聯(lián)合體的大小聯(lián)合體的大小是成員中占內(nèi)存最是成員中占內(nèi)存最大的成員的大小大的
54、成員的大小共占共占4字節(jié)字節(jié)最新存儲的數(shù)據(jù)是有效的聯(lián)合的概念及聯(lián)合類型定義聯(lián)合的概念及聯(lián)合類型定義C語言用戶自定義數(shù)據(jù)類型58說明:說明:(1) 系統(tǒng)為所有聯(lián)合類型成員分配同一地址開始的存儲空間系統(tǒng)為所有聯(lián)合類型成員分配同一地址開始的存儲空間, 使用覆蓋的方式共享存儲單元。使用覆蓋的方式共享存儲單元。例:用數(shù)組作聯(lián)合類型的成員例:用數(shù)組作聯(lián)合類型的成員union utp1 unsigned char b2; unsigned w; r1; 本例聯(lián)合類型中本例聯(lián)合類型中, 定定, 用用r1.b1。例如下列程序段:。例如下列程序段:r1.w = 0 x6141; printf(%c, %c, %u
55、n, r1.b0, r1.b1, r1.w); 輸出結(jié)果是:輸出結(jié)果是:A, a, 24897w4161b1b0聯(lián)合的概念及聯(lián)合類型定義聯(lián)合的概念及聯(lián)合類型定義C語言用戶自定義數(shù)據(jù)類型59(2) 聯(lián)合類型也允許嵌套定義聯(lián)合類型也允許嵌套定義,例如:例如:union utp struct char low, high; b; unsigned w; r ; 以上在聯(lián)合類型中以上在聯(lián)合類型中, 定義了一個結(jié)構(gòu)類型成員定義了一個結(jié)構(gòu)類型成員b, 如如上圖所示。本例中可以用上圖所示。本例中可以用,而用值而用值, 也可以用也可以用r.w一次存取一次存取雙字節(jié)的值。雙字節(jié)的值。wb.lowb.high聯(lián)合
56、的概念及聯(lián)合類型定義聯(lián)合的概念及聯(lián)合類型定義C語言用戶自定義數(shù)據(jù)類型60(3) 聯(lián)合類型變量所占空間的大小取決于占存儲空間最大的聯(lián)合類型變量所占空間的大小取決于占存儲空間最大的那個成員。例如上述例子中那個成員。例如上述例子中(圖圖4.13所示所示), sizeof(u_type)或或sizeof(v)的值均為的值均為, 因?yàn)槌蓡T因?yàn)槌蓡Tch、i、f中中, f占個字節(jié)的存儲空間占個字節(jié)的存儲空間, 是占空間最大的。是占空間最大的。(4) 由于聯(lián)合類型變量中所有成員共享存儲空間由于聯(lián)合類型變量中所有成員共享存儲空間, 因此變量因此變量中的所有成員的首地址相同中的所有成員的首地址相同, 而且聯(lián)合類型
57、變量的地址而且聯(lián)合類型變量的地址也就是該變量成員的地址。也就是該變量成員的地址。&r, &r.w, &r.b.low的值均相的值均相同。同。聯(lián)合的概念及聯(lián)合類型定義聯(lián)合的概念及聯(lián)合類型定義C語言用戶自定義數(shù)據(jù)類型61練習(xí):如果有定義:練習(xí):如果有定義:union xy char ch; int a3; float b;);共用體類型共用體類型union xy的存儲單元中各成員占用空間情況如的存儲單元中各成員占用空間情況如圖:圖: 則共用體類型則共用體類型union xy的長度是的長度是6(占用內(nèi)存的字節(jié)數(shù))。(占用內(nèi)存的字節(jié)數(shù))。cha0a1a2b聯(lián)合的概念及聯(lián)合類型定義聯(lián)合的概念及聯(lián)合類型定
58、義C語言用戶自定義數(shù)據(jù)類型62共用體變量的定義有如下三種處理方式:共用體變量的定義有如下三種處理方式:(1)先定義共用體類型,再定義共用體變量。)先定義共用體類型,再定義共用體變量。例例1:union xy char ch; int a3; float b; /*定義共用體類型定義共用體類型union xy */union xy x,y; /*定義定義x、y為共用體類型為共用體類型union xy的變量的變量*/C語言用戶自定義數(shù)據(jù)類型63聯(lián)合變量的定義及成員的引用聯(lián)合變量的定義及成員的引用(2)在定義共用體類型的同時定義共用體變量。)在定義共用體類型的同時定義共用體變量。例例2:union
59、xy char ch; int a3; float b; x,y; (3)直接定義共用類型變量。)直接定義共用類型變量。例例3:union char ch; int a3; float b; x,y; C語言用戶自定義數(shù)據(jù)類型64l聯(lián)合體與結(jié)構(gòu)體都是由多個成員分量組成的一個聯(lián)合體與結(jié)構(gòu)體都是由多個成員分量組成的一個整體;整體;l聯(lián)合體與結(jié)構(gòu)體在定義、說明和使用(成員引用、聯(lián)合體與結(jié)構(gòu)體在定義、說明和使用(成員引用、指針)上十分相似。指針)上十分相似。n結(jié)構(gòu)體:多個成員分量分別占用不同的存儲空間結(jié)構(gòu)體:多個成員分量分別占用不同的存儲空間構(gòu)成一個整體;成員分量之間是相互獨(dú)立的,所構(gòu)成一個整體;成員
60、分量之間是相互獨(dú)立的,所進(jìn)行的各種操作互不影響。進(jìn)行的各種操作互不影響。:多個成員分量共同:多個成員分量共同存儲空間;存儲空間;成員成員之間是之間是的,所進(jìn)行的操作相互的,所進(jìn)行的操作相互依賴。依賴。C語言用戶自定義數(shù)據(jù)類型65:聯(lián)合在一個時間里不能三個成員同時起作:聯(lián)合在一個時間里不能三個成員同時起作用,而只能有一個成員在起作用,而且是最后被用,而只能有一個成員在起作用,而且是最后被賦值的成員;而結(jié)構(gòu)在任何一個時間都是三個成賦值的成員;而結(jié)構(gòu)在任何一個時間都是三個成員同時在起作用。員同時在起作用。n聯(lián)合變量的長度等于類型最長的成員的長度,而聯(lián)合變量的長度等于類型最長的成員的長度,而結(jié)果變量的
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)療軟件購買合同范本
- 縣城餐飲轉(zhuǎn)讓合同范本
- 三個合伙購房合同范例
- 廚師保密協(xié)議合同范本
- 原油供銷合同范例
- 合伙創(chuàng)業(yè)辦廠合同范本
- 賣賣布合同范本
- 加工磚頭銷售合同范本
- 人保車險客戶專員合同范本
- 分期購買釘鞋合同范本
- 2025山東能源集團(tuán)中級人才庫選拔高頻重點(diǎn)提升(共500題)附帶答案詳解
- 高血壓性視網(wǎng)膜病變
- 2025山東能源集團(tuán)中級人才庫選拔管理單位筆試遴選500模擬題附帶答案詳解
- CNAS-R03:2023申訴、投訴和爭議處理規(guī)則
- 四大名著之紅樓夢飲食文化
- 醫(yī)院后勤管理與服務(wù)提升方案
- 員工互評表(含指標(biāo))
- 2024年浙江省中考社會(開卷)真題卷及答案解析
- 【MOOC】英語口語進(jìn)階-南京大學(xué) 中國大學(xué)慕課MOOC答案
- 時間規(guī)劃局中文版
- 2024-2030年中國干細(xì)胞美容產(chǎn)業(yè)競爭格局及投資戰(zhàn)略研究報(bào)告
評論
0/150
提交評論