


版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第 9 章結構體和共用體 12( 07) -博雅研究谷 -讓信息技術更容易教學,在信息技術學習中更有效第 9 章結構和公地學習目標?掌握結構類型和變量的定義和初始化?掌握結構變量引用 ?掌握結構和數組、指針、函數等的組合。掌握常見身體變量的定 義和參考?理解結構和共享空間的內存分配機制前幾章學習的數據類型是分散的, 相互獨立的。例如,int a和char b被定義為兩個沒有內部聯系的變量。然而,在現實生活和工作中,經 常需要處理一些密切相關的數據,例如描述公司員工的姓名、部門、 職位、電話號碼和電子郵件地址。因為這些數據類型不同,所以很難 僅通過上一章學習的基本類型和數組來統一管理這些數據。為
2、此, C 語言提供了另外兩種構造類型, 即結構和公共體。 本章將詳細解釋這 兩種構造類型。9.1 結構類型和結構變量結構類型定義結構是一種集成不同類型數據的結構數據類型。每個數據都被稱為 結構類型的成員在程序設計中, 當使用結構類型時, 必須首先描述結 構類型的組成。結構類型定義如下 : 結構類型名稱 ;數據類型成員名稱 1;數據類型成員名稱 2;數據類型成員名稱 n;在上述語法結構中,“ struc是定義結構類型的關鍵字,后跟定義的“結構類型名稱 ”。在“結構類型名稱 ”下的括號中,定義了結構類型的 成員項,每個成員由 “數據類型”和“成員名稱”組成例如,為了描述一組學生信息, 信息由學生編
3、號 (數字 )、姓名 (姓名)、 性別(性別)、年齡(年齡)、地址(地址)等組成。我們可以使用以下語句 來定義一個名為 “學生”的結構類型 :1學歸 -使信息技術教學更簡單,信息技術學習更有效結構學生 ;整數;char name10;迷人的性;國際年齡;char 地址30;在上述結構類型的定義中, 結構類型學生由 5 個成員組成, 即人數、 姓名、性別、年齡和地址值得一提的是,結構類型中的成員也可以是結構變量。例如,出生 日期信息被添加到學生信息中。具體代碼如下 : 結構日期 ; 結構學生 整數;char name10;迷人的性;結構生日;年份;國際月;國際日; stu 1 ;在上面的代碼中,
4、我們首先定義了結構類型 Date,它由三個成員組 成:年、月和日。然后定義結構變量 stul,其中成員生日是日期結構類型學生的類型結構如圖 9-1 所示numnamemesexexyearyearbydaydaydaydaymonthmonthyday圖 9-1 結構類型學生類型結構注:1,結構類型定義以關鍵字 struct 開頭,后跟結構類型的名稱,其命名規則與變量名相同。2,在定義了一個結構類型之后, 并不意味著立即分配一個存儲單元 來存儲每個數據成員, 它只是告訴編譯器結構類型是由哪些數據類型 的成員組成的,每個成員占用多少字節,以什么格式,并把它們作為 一個整體來處理3,結構類型定義末
5、尾括號后的分號是必不可少的4,結構類型的成員可以是結構變量, 但不能是其自身結構類型的變 量結構變量的定義前一節只定義了結構類型,它只相當于一個模型,其中沒有特定的數據, 系統不會為其分配內存空間。 為了在程序中使用結構類型的數據, 應 定義結構類型的變量,并在其中存儲 2博雅研究谷 -使信息技術教學更簡單, 信息技術學習更有效地輸入特定數據。以下是定義結構變量的三種方法1。首先定義結構類型,然后定義結構變量,就可以定義結構變量。定義結構變量的語法格式如下 :結構類型名稱結構變量名稱;例如:structure studenty1,student 2;以上示例定義了結構類型變量 stul和stu
6、2,當變量stul和stu2具有結構特征時,它們各自存儲一組基本類型變量,如圖 9-2 所示張三張三 李云滿滿滿滿滿女 23232525北京上海圖 9-2 變量 stu 1 和 stu 2的存儲結構。從圖9-2可以看出,變量stul和stu2分別占據連續的存儲空間2.定義結構類型時定義結構變量與第一種方法具有相同的功能,其語法格式如下 :結構類型名稱 數據類型成員名稱 1;數據類型成員名稱 2;數據類型成員名稱 n; 結構變量名稱列表;例如:struct student int num ; char name10;迷人的性; stu1 、stu2在定義結構類型student時,上面的代碼還定義
7、了結構類型變量stul和stu2變量stu1和stu2中包含的成員的數據類型是相同的3,結構變量的直接定義除了上述兩種方法外,我們還可以用以下語法直接定義結構變量 : struct 數據類型成員名稱1;數據類型成員名稱2; 數據類型成員名稱 n;結構變量名稱列表;例如:3博雅研究谷 -使信息技術更容易教學,對信息技術學習更有效 結構int num; char name10;迷人的性; stu1、stu2上面的代碼也定義了結構變量 stul和stu2,但是以這種方式定義的 結構沒有類型名,我們稱之為匿名結構。結構類型是用戶定義的數據類型。它不會在編譯時為結構類型分配空間,就像前面描述的簡單數據類
8、型一樣。 只有當它被用來定義一個 變量時,結構變量才會被分配結構類型所需大小的存儲單元結構變量的內存分配一旦定義了結構變量,系統將為其分配內存結構變量占用的內存大小是根據字 節對齊機制分配的。字節對齊意味著字節按照一定的規則排列在空間 中。一般來說,字節對齊滿足以下兩個原則 :(1)結構的每個成員變量相對于該結構的第一個地址的偏移量是基本數據類型 (不包括結構、數組等 )大小的整數倍。 )的成員變量;如果沒有,編譯器將在成員之間添加填充字節接下來通過一個案例打印每個成員變量的地址,如示例 9-1 所示例9-11 #include 2 /直接定義結構變量 3 struct 4 5 6 7 8 c
9、har a;雙 b; int c;短 d;10 void main()11 12 13 14 15 17 成 員 變 量 b 的 地成員變量 d 的地成 員變量 a 的地址址成員變量 c 的地址址:dn成員變量d的地址:% d n | 16)4博雅研究谷 -使信息技術更容易教信息技術, 更有效地學習信息技術圖 9-3 運行結果從圖 9-3 可以看出,結構變量中成員變量的地址被打印出來。結構變量s中每個成員占用的內存如圖9-4所示圖 9-4 的結構變量中每個成員占用的內存。接下來,根據圖 9-3 和9-4,逐步分析每個成員變量的地址?成員變量 A 的地址是 3703968,也是結構變量 S 的第
10、一個地址; ?成員變量 B 的地址是 3703976,與結構變量的第一個地址的偏移 量是 8 字節。這是因為是成員變量 B 的基本數據類型,它是雙精度的,并且它的偏移量應該是8的倍數(sizeof(double),所以變量A用7個字節填充;?成員變量 C 的地址是 3703984,與結構變量第一個地址的偏移量 是 16,這是變量 A 和變量B占用的內存大小之和,正好是 4的倍數(sizeof(int);?成員變量D的地址是3703988,與第一個地址的偏移量是20字節。 它是變量A、B和C占用的個內存大小的總和,正好是2的倍數(sizeof(short)(2)結構的總大小是該結構最寬的基本類型
11、成員大小的整數倍。如果 不夠,編譯器將在最后一個成員后添加填充字節。通過實例9-1的分析,結構變量S的內存大小可以計算為22,但這 不符合字節對齊的第二個標準。 示例 9-1 中的結構變量的內存大小將 如下例 9-2 所示打印。例 9-21 #包括 2 結構 3 4 5 6 7chara;雙 b; int c; 短 d;8 s;9 void main()10 11 12 內存中結構變量s的大小:dn運行結果如圖 9-5 所示5博雅研究谷 -使信息技術更容易教信息技術, 更有效地學習信息技術圖 9-5 運行結果從圖 9-5 可以看出,結構變量 s 的內存大小是 24 字節,而不是 22 字節這是
12、因為結構的總大小應該是最寬基類型的成員大小的整數倍 成員變量中最寬的基本類型的大小為 8(雙倍),因此在 d 之后填充 2 字節,結構變量s占用的內存大小為24字節內存分配如圖9-6所示占用1字節來填充7字節s成員aa占用8字節成員bb占用4字節 成員cc占用2字節來填充2字節成員dd圖9-6結構s占用總內存大小應該注意,如果結構中有結構類型變量,如結構中的char類型數組成員,則其偏移量基于數組中的元素類型,即偏移量是 1 的倍數 (sizeof(char)對于int類型的數組,偏移量是 4的倍數(sizeof(int) 關于結構變量的分配,不同的編譯器有不同的分配規則。讀者可以 理解。在實
13、際應用中,sizeof()運算符可用于快速找到結構變量的大小。結構變量的初始化由于結構變量存儲一組不同類型的數據,初 始化結構變量的過程實際上就是初始化結構中每個成員的過程根據 定義結構變量的不同方式,有兩種初始化結構變量的方法。1。定義結構類型和結構變量時初始化結構變量。具體例子如下結構學生 整數;char name10;迷人的性;斯圖= 20140101。上述代碼在定義結構變量 stu 時初始化了它的成員 2.定義結構類型 后,初始化結構變量。具體例子如下 :結構學生 ;結構學生數 = 20140101 , 整數;char name10;迷人的性;在上面的代碼中,首先定義了一個結構類型St
14、uden,然后在定義結構變量時初始化它的成員6博雅研究谷 -讓信息技術更容易教學,對信息技術學習更有效?注意 :當初始化一部分成員變量時,如果只有一部分成員被初始化,前一個成員應該被初始化,后 一個成員可以是自由的, 因為當分配成員變量時, 編譯器在成員之間 進行匹配, 而不是根據數據類型自動匹配一些成員可以被初始化, 然 后打印出來,如例 9-3 所示。例 9-3# includes tructstudent int num ; char name10;迷人的性;斯圖= 20140101,' M ; void main()printf(printf( printf( )運行如圖 9-
15、7 所示圖 9-7 運行結果如圖9-7所示,在結構變量stu中只分配了 num和sex,但當輸出所 有成員的值時,“ M被分配給name, sex沒有值對結構變量 的引用定義并初始化結構變量以使用結構變量中的成員在 C 語言 中,引用結構變量成員的方式如下 :結構變量名。成員名稱;例如,以下語句用于引用結構變量 stul中的num成員:stu 1 . num; 為了幫助大家更好地掌握結構變量的使用,通過一個案例輸出結構 變量中所有成員的值,如例 9-4所示。例 9-41 # INCLUDE 2 # INCLUDE 3 STRUCT STUDENT 4 7博雅研究谷 -使信息技術教學更簡單,信息
16、技術學習更有效5 6 7 ;8 void main()9 10 12 13 struct 學生二 24;char name50;國際年齡;的運行結果如圖 9-8 所示圖 9-8 運行結果從圖 9-8 中可以看出,結構變量中的成員名稱和年齡的值被輸出9.2 結構數組 結構變量可以存儲一組數據,如學生的序列號、姓名、性別和其他 數據如果有 10 個學生的信息需要存儲,可以使用一系列結構。與前 面解釋的數組不同, 結構數組中的每個元素都是結構類型的, 它們都 是具有幾個成員的項。 本節將詳細解釋結構數組的定義、 引用和初始 化方法。結構數組的定義假設一個班有 20 名學生。如果我們需要描述這 20
17、個學生的信息, 我們可以定義一個長度為 20 的學生類型數組。就像定義結構變量一 樣,我們可以用三種方式定義結構數組 stu1。首先定義結構類型,然后定義結構數組。具體例子如下:結構學生 ;結構學生 20;整數;char name10;迷人的性;2。定義結構類型時定義結構數組。具體例子如下 : 結構學生 整數;char name10;迷人的性;斯圖斯20;8博雅研究谷 - 為了使信息技術更容易教學和在信息技術學習中更有效3,直接定義結構數組,具體示例如下 :struct int num; char name10;迷人的性;斯圖斯20;9.2.2 結構數組的初始化 結構數組的初始化類似于數組的初
18、始化,通過給元素賦值來完成。由于結構數組中的每個元素都是一個結構變量, 因此在為每個元素賦 值時,需要將它的成員的值依次放在一對大括號中。以為例,定義一個學生結構數組, 該數組有 3 個元素,每個元素有 num、 name、sex 三個成員,可以用以下兩種方式初始化學生結構數組1 ,首先定義結構數組類型,然后初始化結構數組。具體例子如下 : 結構學生 ;結構學生 3 = 20140101 ,20140102 , 20140103, ;整數;char name10;迷人的性;2。定義結構數組時初始化結構數組。具體例子如下:結構學生 整數;char name10;迷人的性;20140102,201
19、40103, ;學生3 = 20140101 。- 當然,這樣初始化結構數組時,可以不指定結構數組的長度,編譯時 系統會根據初始化值自動確定結構數組的長度。 例如,以下初始化方 法也是合法的 結構學生 整數;char name10;迷人的性;9博雅研究谷 -讓信息技術更容易教學,在信息技術學習中更有效 學生 = 20140101 ,20140102,20140103, ;引用結構數組引用 結構數組引用結構數組元素。因為每個結構數組元素都是一個結構 變量,所以結構數組元素的引用方式與結構變量相似。 其語法格式如 下:數組元素名。成員名稱;例如,要引用第 9.2.2 小節中結構數組學生的第一個元素
20、的 num 成 員,可以使用以下方法 :學生0。num為了幫助讀者更好地掌握結構數組的引用,下面的示例用于輸出結構數組的所有成員,如示例 9-5 所示。例 9-51 #包括 2 #包括 3 #結構學生 4 5 67 ;8 void main()9 10 11 12 13 14 15 struct Student s2= (int I = 0 ; I printf( char name50;學生間差異;的運行結果如圖 9-9 所示圖 9-9 運行結果在例9-5中,首先定義長度為2的結構數組s,并初始化數組中的元素然后,使用 for 循環,依次輸出 0和1中的成員值9.3 結構指針變量在第 6 章
21、學習指針時,指針指向基本數據類型事實上,指針也可以 指向結構, 這被稱為結構指針變量。 它的用法和一般的指針沒什么不 同。本節將詳細解釋結構指針變量。10博雅學習谷 -讓信息技術更容易教信息技術, 更有效地學習信息技術結構指針變量在使用結構指針變量之前,首先需要定義結構指針。結構指針的定 義方式與通用指針相似。 例如,下面的語句定義了一個學生類型指針struct student s = struct student * p =在上面的代碼中,定義了一個結構指針p。通過“8 void main()9 10 11 12 13 strut 學生 s = struct 學生 * p =prin tf(
22、 charname50;學生間差異;的運行結果如圖 9-10 所示圖 9-10 運行結果在示例9-6中,首先定義結構類型變量 S,并將變量S中的成員名 稱初始化為張三, 并將 studentID 初始化為 20140000 然后, 定義一個 結構指針p,并將p指向s的地址。最后,通過p->name訪問成員名 和 studentID 的值從圖 9-10 可以看出,也可以使用結構指針來訪問結 構變量中的成員。結構數組指針指針可以指向結構數組,即結構數組的起始地址分配給指針變量。 這個指針是結構數組指針。例如,下面的語句定義了一個Student 結構數組和該數組的指針結構學生學習 1 10 ,
23、 * p =在上面的代碼中, p 是一個學生結構數組指針,從定義上看,它與結 構指針沒有什么不同,只是指結構數組為了幫助讀者更好地掌握結構數組指針的用法,下面以一個案例來 演示如何使用結構數組指針11博雅學習谷 使信息技術教學更簡單,信息技術學習更有效地輸 出多個學生的信息,如例 9-7 所示。例 9-71 #包括 2 #包括 3 結構學生 4 5整數;6 char name20; 7迷人的性;8歲;9 斯圖3= 10 201401001, 11 201401002, 12 201401003, 13 void main()1415 strut student * p;16 printf( 1
24、7 for(p = stu ;“p用于獲取成員的值如圖9-11所示,程序輸出結構數組 stu 中所有元素的成員值9.4 函數之間的結構類型數據傳輸 不僅可以傳輸簡單的變量、數組、指針和其他類型的數據,還可以 在函數之間傳輸結構類型數據本節將詳細解釋函數之間結構類型數 據的傳輸。9.4.1 結構變量作為函數參數 結構變量用作函數參數的方式與普通變量相似,兩者都需要確保調 用函數的參數類型與被調用函數的參數類型相同當結構變量用作函 數參數時,它們也是值傳遞。結構成員變量的值在調制函數中改變,127 文科谷 -使信息技術教學更簡單, 信息技術學習更有效。 主調制功能不受影響。如例 9-8 所示,例
25、9-81 #包括 2 結構學生 3 4 56 ;7虛空變化(結構學生)8 9 10 11 12虛空主()13 14 15 16 17 結構學生變更(學生) ;printf( str copy(stu-> name, stu . studentid = 2; char name50;學生 間差異;的運行結果如圖 9-12 所示圖 9-12 示例 9-8 中的運行結果定義了一個用于更改數據的cha nge()函數,該函數需要接收結構類型的參數從代碼的第 15 行可以看出,當結構變量作為參數傳遞給函 數時,參數的傳遞方式與普通變量相同。在主函數中調用cha nge()函數后,主函數結構中成員的
26、值沒有改變。結構數組作為函數參數 函數不僅可以傳遞一般結構變量,還可以傳遞結構數組接下來,使 用一個案例來演示如何使用結構數組作為傳遞數據的函數參數, 如示 例 9-9 所示。例 9-91 #包括 2 strut student 3 4 56 ;7 void printInfo( 結構學生 ), int 長度)8 9for(int I = 0 ; I13文科谷 -讓信息技術更容易教學。提高信息技術學習效率10 11 12 13 14 15 Void Main()16 17Struct 學生3= 18 19 20 21 Printlnfo(學生,3); printf( printf() 運行結果
27、如圖 9-13 所示。圖 9-13 運行實例 9-9 中的結果,因為其長度不能直接通過數組獲得,因此,在定義的 printfInfo() 函數中,需要傳遞兩個參數,一個是結構數組,另一個是數組的長度 收到傳遞的數組名和長度后, printfInfo() 函數使用 for 循環輸出結構 數組中的所有成員結構指針用作函數參數 結構指針變量,以存儲結構變量的第一個地址,因此當指針作為函 數參數傳遞時, 它實際上是結構變量的第一個地址。 如果結構成員的 值在調制函數中改變, 則主調制函數中的結構成員的值也將改變。 如 實施例 9-10 所示例 9-101 #包括 2 strut student 3 4
28、 56 ;7 void change(strut Student * stu)8 9 10 11 12 void main()str copy(stu-> name stu-> studentID = 2; char name50; 學生間差異;14博雅研究谷 -讓信息技術更容易教學,更有效地學習13 14 15 16 17 struct student = change(printf(運行結果如圖 9-14 所示)圖 9-14 運行結果在示例9-10中,定義了一個change()函數來更改數據。該函數需要 接收結構指針類型的參數。 由于結構指針用作函數參數, 因此需要傳 遞結構變
29、量的第一個地址。 因此,在代碼的第 15行,傳遞了“函”數。在上述語法格式中,“ unior是定義公共體類型的關鍵字,后面是定 義的“公共體類型名稱 ”。在“公共體類型名稱 ”下的括號中,定義了公 共體類型的成員項,每個成員由 “數據類型”和“成員名稱”組成例如,下面的代碼 :union data int m;浮動 x ; char c; ;15博雅研究谷 -讓信息技術更容易教學,更有效地進行信息技術學習上述代碼定義了一個名為 data 的通用主體類型,它由共享相同存儲 空間的三種不同類型的成員組成公共體變量的定義 公共體變量的定義類似于結構變量的定義。如果要定義公共體變量a和b的兩種數據類型
30、,可以采用以下三種方法1。首先定義公共體類型,然后定義公共體變量。具體示例如下 : 聯合數據 int m ;浮點 x;char c; ;工會數據 a, b;2。定義了公共體變量,同時定義了公共體類型。具體示例如下 : 聯合數據 int m; 浮動 x; char c; a , b;3,直接定義公共體類型變量,具體示例如下 :union int m; 雙 x。char c; a , b;以上三種方法都是用來定義公共體變量 A 和 B 的,它們與結構變量 的定義相同。?再學一個技巧 :共享空間的內存分配共享空間的內存分配必須符合如下兩個標準 :1,共享空間的內存必須大于或等于其成員變量中的大數據類
31、型 (包括基本數據類型和數組 )的大數據類型小數據類型2,共享空間的內存必須是最寬基本數據類型的整數倍, 否則必須填充字節接下來,通過對兩個常見物體的記憶分析來解釋上述標準。(1)成員變量都是基本數據類型的公共項,特別是union int m;浮動 x; char c; a ;16博雅研究谷 -使信息技術教學更容易,信息技術學習更有效。公地 a 的內存大小如圖 9-15 所示 結構可變頭地址最大基本數據類型浮點大小 :4 字節 圖 9-15 公共體 a 的內存大小公共體a的內存大小是最大數據類型(即int和float)占用的字節數, 因此公共體 a 的內存大小為 4 字節(2)成員變量包含數組
32、類型的公共體,如下所示union int m;浮動 x ; char c; char name5; b。公共體b的內存大小如圖9-16所示。結構的可變頭地址字符名稱 5占用的字節大小 :5字節 3填充字節 圖 9-16 公共體 b 的內存大小公共體 b 的內存大小是根據最大數據類型字符名稱 5分配的,字符名稱5占用5個字節公共體B的內存大小也必須是最寬的基本數據 類型的整數倍,因此它填充了 3 個字節,總共 8 個字節。讀取器可以 通過sizeof()驗證公共體變量的內存大小共享卷變量的初始化和引用 在定義共享卷變量時只能初始化一個成員的類型值,這也與其內存 分配相對應公共體變量的初始化方法如
33、下 :union公共體類型名稱公共體變量二一個成員的類型值 從上述語法格式來看,雖然只能給一個成員賦值,但必須用大括號 括起來例如,以下語句用于初始化數據類型的公共體變量 a 17人文藝術谷 -使信息技術更易于教學,對信息技術學習更有效聯合數據 a = 8 ;完成公共體變量的初始化后,可以引用公共體中的成員。公共體變 量的引用方法類似于結構。 例如,下面的代碼定義了一個公共體變量 和一個公共體指針聯合數據int m;浮動 x ; char c; ;union data a,*p=如果要引用公共體變量中的 m 個成員,可以使用以下方法 :a . m; /引用公共體變量 A 中的成員 mp->
34、;m /,引用公共體指針變量 p 指向的變量成員 m ,應該注意的是,雖然公共體變量的引用方法與結構的引用方法相 似,但兩者是有區別的。 主要區別在于,在程序執行的任何特定時刻, 結構變量的所有成員同時駐留在結構變量占用的內存空間中, 而公共 體變量只有一個成員駐留在公共體變量占用的內存空間中接下來, 通 過實例進行驗證,如實例 9-11 所示。例 9-111 #包括 2 個聯合數據 3 4 5 6 ;7 void main()8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 printf( s address % p n printf( s addr
35、ess % p n printf( s address % p n union Data d; /定義一個聯合 d.i = 15printf( printf( printf(d . j = a );printf( printf( printf( int I ; char j;的運行結果如圖 9-17 所示18博雅研究谷 -為了使信息技術教學更容易,信息技術學習更有效圖 9-17 操作結果在示例9-11中,定義了數據類型的公共體積變量 d。有兩個變量I 是整型的, j 是字符型的。當我被賦給 15時,此時結構 d 中只有一個 值15。I的值、j的值和結構變量d的值在相應的存儲器中實際上是 相同的
36、值。當 j 的值是字符 a 時,那么此時在存儲器中只有對應于 d 的字符a,并且I、j和d的值是97最后,打印D、丨和J的地址,這 三個地址是相同的, 這進一步解釋了公共體變量在任何時候在內存中 都應該只有一個成員值。9.6 TypeDef-別名數據類型在前面的章節中,由 C 語言提供的各種數據類型和用戶聲明的結構、 共享空間、指針類型等。被解釋了。除了這些數據類型, C 語言還允 許用戶使用typedef關鍵字來別名現有的數據類型使用typedef關鍵字 可以方便程序遷移并減少對硬件的依賴。 接下來,將詳細解釋 typedef 關鍵字。使用typedef關鍵字的的語法格式如下 :typede
37、f數據類型別名;在上述語法格式中, 數據類型包括基本數據類型、 構造的數據類型、指針等。接下來,將詳細解釋這些項目。1,別名基本類型,別名int類型使用typedef關鍵字,示例代碼如下:typedef int ZX ; ZX 世,j, k;上面的語句定義int數據類型為ZX,那么ZX可以用來定義程序中的整數變量2.別名數組類型使用 typedef 關鍵字來別名數組。示例代碼如下 :typedef char NAME10 ;名稱類別 1,類別 2;上面的語句 定義了一個可以包含 10 個字符的字符數組 NAME ,并使用 NAME 定義了兩個字符數組 class1和class2,它們相當于ch
38、ar class110和char class2103,別名結構別名結構類型學生使用 typedef 關鍵字,示例代碼如下 :typedef結構學生intnum; char name10;19博雅研究谷 -讓信息技術更容易教學,更有效地進行信息技術學習char sex STU。STU stul 上面的陳述定義了學生類型的結構 STU,STUDU1 語句等效于 structure student1 ;句子應該注意的是,使用typedef關鍵字只是別名現有類型,而不是定義 新類型有時宏定義可以用來替換 typedef的函數,但是宏定義是通過 預處理完成的,而 typedef 是在編譯時完成的,這使得
39、使用 typedef 更加靈活。9.7 高級案例發現學生平均分數在學習了結構和普通體的相關知識后,下面是計算平均分數以加深 對結構的理解的案例。具體要求如下 :?一個小組有三個學生。 每個學生選修四門課程 (與三個學生相同的 課程)?在程序中輸入 3個學生的 4門課程的分數,程序自動計算 4 門課 程的分組平均分數,然后用代碼實現上述功能,如例 9-12 所示。例9-121 # define _ CRT _ secure _ no _ warnings 2 # include 3 # include 45 typedef structstu 67 910 Void Main()11 12 13
40、 14 15 16 17 18 19 20 21 22 23 24 25 26 27 /將三名學生的每個科目的成績相加, 得出 (j = 0) 的平均分數 j int i ,j; 浮動總和 = 0,平均值;斯圖3; /定義一個包含3個元素的結構數組/從鍵盤輸入學生的姓名和分數(I = 0; I請輸入%d名學生的姓名和四門課程的成績 : n scanf( for(j = 0 ; j scanf(char name20; /學生姓名浮動分數4; 4門課程,8 STU ;20博雅研究谷 -讓信息技術更容易教學,更有效地學習28 29 30 31 32 33 34 35 36 37 系統(for(I = 0 ; I
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 江蘇財會職業學院《彈性力學與有限元》2023-2024學年第二學期期末試卷
- 天津鐵道職業技術學院《PHP動態網站開發》2023-2024學年第二學期期末試卷
- 深圳技術大學《透過影像看健康》2023-2024學年第一學期期末試卷
- 天津美術學院《鄉村幼兒園教師專業素養案例原理方法》2023-2024學年第二學期期末試卷
- 漯河食品職業學院《住宅及辦公空間室內環境設計》2023-2024學年第一學期期末試卷
- 石家莊城市經濟職業學院《漢語國際教育概論》2023-2024學年第二學期期末試卷
- 楊凌職業技術學院《食品工程原理(2)》2023-2024學年第二學期期末試卷
- 離婚協議書模板子女已成年
- 回遷房屋買賣合同集錦二零二五年
- 股東退股競業限制協議書二零二五年
- 安全生產特種設備日管控、周排查月調度工作制度
- 臨時用電施工組織設計-完整
- 2023年高考遼寧卷化學真題(解析版)
- 第三章物流節點選址模型與方法
- 糧油食材配送投標方案(大米食用油食材配送服務投標方案)(技術方案)
- 爆破施工分包協議范本
- DB3301∕T 65.28-2024 反恐怖防范系統管理規范 第28部分:硬質隔離設施
- 混凝土樓蓋課程設計講解
- 北京版小學英語1至6年級詞匯
- 3-1-立體表面上點的投影
- (正式版)QB∕T 2761-2024 室內空氣凈化產品凈化效果測定方法
評論
0/150
提交評論