版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、第十講Begin:第十章 結構體和共用體 結構體類型的定義結構體類型變量的定義結構體類型變量的初始化和引用結構體數(shù)組9.1 結構體 結構體是數(shù)目固定、類型不同的若干變量(成員)的有序集合,在內(nèi)存中占據(jù)一段連續(xù)的存儲空間。在程序中使用結構體,必須先做兩項工作:1)定義結構體類型:描述該結構體的成員名稱、成員類型;2)定義結構體變量:根據(jù)結構體類型為定義的結構體變量分配存儲空間。9.1.1 結構體類型的定義 結構體類型定義的一般格式為: struct 結構體名 類型名1 成員名1; 類型名2 成員名2; 類型名n 成員名n; ;9.1.1 結構體類型的定義 結構體類型定義的格式說明:struct:
2、關鍵字,是定義結構體類型的標志。結構體名:標識符,其命名規(guī)則同變量名。struct 結構體名:結構體類型名,作用等同于int、float等關鍵字,用于定義結構體變量。 類型名1n:說明了結構體成員的數(shù)據(jù)類型。成員名1n:用戶定義的一個或多個結構體成員的名稱,其命名規(guī)則同變量名。多個同類型的成員彼此間用逗號分隔。9.1.1 結構體類型的定義 結構體類型定義舉例: struct _Student char id10; /*學號*/char name10; /*姓名*/int score3; /*成績*/int sum; /*總分*/ ;9.1.2 結構體類型變量的定義 結構體類型的定義只是指出了該
3、結構體的組成情況,系統(tǒng)并不會為它分配實際的存儲單元。應在定義了結構體類型以后,再定義該結構體類型的變量(簡稱結構體變量),以便在結構體變量中存放具體的數(shù)據(jù)。結構體變量的定義方式有三種:先定義結構體類型,再定義結構體變量。在定義結構體類型的同時定義結構體變量。直接定義結構體變量。9.1.2 結構體類型變量的定義 方式一:若事先已定義了結構體類型,那么直接用下面的格式定義結構體變量: 結構體類型名 結構體變量名;例如:struct _Student stu1, stu2;stu1和stu2的存儲形式為:sumscore2score0name9name0id9id010字節(jié)10字節(jié)6字節(jié)2字節(jié)9.1
4、.2 結構體類型變量的定義 方式二:在定義結構體類型的同時定義結構體變量。定義格式為: struct 結構體名 類型名1 成員名1; 類型名2 成員名2; 類型名n 成員名n; 結構體變量名表;9.1.2 結構體類型變量的定義 例如: struct _Student char id10; char name10; int score3; int sum; stu1, stu2;9.1.2 結構體類型變量的定義 方式三:在定義結構體類型時可以直接定義結構體變量。定義格式為: struct 類型名1 成員名1; 類型名2 成員名2; 類型名n 成員名n; 結構體變量名表;9.1.2 結構體類型變量
5、的定義 例如: struct char id10; char name10; int score3; int sum; stu1, stu2;9.1.2 結構體類型變量的定義 關于結構體的說明: 類型與變量是不同的概念,應注意區(qū)分。系統(tǒng)可以對變量賦值、存取、運算,而類型則不能。編譯時,系統(tǒng)只為變量分配存儲單元,而類型則不分配。結構體中的成員也可以是一個結構體變量,即結構體的嵌套。結構體中的成員可以和程序中的變量同名,不同結構體中的成員也可以同名。 9.1.2 結構體類型變量的定義 例如: struct date int year, month, day; ; struct _Student2
6、char id10; char name10; struct date birth; /*birth為結構體成員*/ int score3; int sum; stu1, stu2;9.1.2 結構體類型變量的定義 關于結構體的說明: 可以使用typedef關鍵字為結構體類型定義一個別名。例如:typedef struct _Student char id10; char name10; int score3; int sum; Student;9.1.2 結構體類型變量的定義 以后就可以用Student代替結構體類型名來定義結構體變量了。例如: Student stu1, stu2;等價于:
7、 struct _Student stu1, stu2;9.1.3 結構體類型變量的初始化和引用 結構體變量的初始化類似于對數(shù)組的初始化,由于結構體變量的成員可以有不同的數(shù)據(jù)類型,所以各個初值必須與相應成員保持類型一致或兼容。例1:struct _Student char id10; char name10; int score3; int sum; stu1 = 20050001, 胡樹偉, 87, 71, 81;9.1.3 結構體類型變量的初始化和引用 例2: struct date int year, month, day; ; struct _Student2 char id10; c
8、har name10; struct date birth; int score3; int sum; stu2 = 20050002, 李冬, 1987, 5, 3, 75, 85, 76;9.1.3 結構體類型變量的初始化和引用 對結構體變量初始化的說明:對結構體變量進行初始化時,系統(tǒng)是按每個成員在結構體變量中的順序一一對應賦初值的。若只對部分成員進行初始化,則只能給前面的若干成員賦值,而不允許跳過前面的成員給后面的成員賦值。例如:前面兩例中結構體變量stu1和stu2的成員sum沒有獲得指定初值,而是獲得默認初值0。9.1.3 結構體類型變量的初始化和引用 引用結構體變量的一般方式為:結
9、構體變量名成員名其中:為結構體成員運算符,1級運算符。例如:stu1.sum表示對結構體變量stu1中的sum成員進行引用。9.1.3 結構體類型變量的初始化和引用 結構體變量的引用規(guī)則:不能將結構體變量作為一個整體進行輸入和輸出。 例如:struct _Student3 long num; int age; char sex; st; 下面的寫法是錯誤的: scanf(%ld%d%c, &st); printf(%ld,%d,%c, st); 下面的寫法是正確的: scanf(%ld%d%c, &st.num, &st.age, &st.sex); printf(%ld,%d,%c, st.
10、num, st.age, st.sex);9.1.3 結構體類型變量的初始化和引用 結構體變量的引用規(guī)則:內(nèi)嵌結構體成員的引用,必須逐層使用成員名定位,找到最底層的成員。 例如: struct date int year, month, day; ; struct _Student2 char id10, name10; struct date birth; int score3, sum; stu2 = 20050002, 李冬, 1987, 5, 3, 75, 85, 76; printf(birthday=%d,%d,%dn, stu2.birth.year, stu2.birth.mo
11、nth, stu2.birth.day);9.1.3 結構體類型變量的初始化和引用 結構體變量的引用規(guī)則:若結構體的成員是字符數(shù)組,可對其進行直接引用。 例如: struct _Student char id10; char name10; int score3; int sum; stu1; scanf(%s%s, stu1.id, ); printf(id=%s, name=%s, stu1.id, );9.1.3 結構體類型變量的初始化和引用 結構體變量的引用規(guī)則:若結構體的成員是數(shù)值型數(shù)組,則應逐個引用數(shù)組中的元素。 例如: struct _Stud
12、ent char id10; char name10; int score3; int sum; stu1; scanf(%d%d%d, &stu1.score0, &stu1.score1, &stu1.score2); printf(Math=%d, English=%d, Computer=%d, stu1.score0, stu1.score1, stu1.score2);9.1.3 結構體類型變量的初始化和引用 例 結構體變量的輸入和輸出typedef struct _Student char id10, name10; int score3, sum; Student; /*定義結
13、構體類型別名*/void main( ) Student stu1, stu2; /*定義結構體變量*/ scanf(%s%s%d%d%d, stu1.id, , &stu1.score0, &stu1.score1, &stu1.score2); stu1.sum=stu1.score0+stu1.score1+stu1.score2; stu2=stu1; printf(%s, %s, %d, %d, %d, %d, stu2.id, , stu2.score0, stu1.score1, stu1.score2, stu2.sum);9.1.4 結構體
14、數(shù)組 結構體數(shù)組的每個數(shù)組元素都是一個結構體變量,它們都分別包括各個成員項。結構體數(shù)組的定義和定義結構體變量的方法相似,只需說明其為數(shù)組即可。例1: struct _Student char id10, name10; int score3, sum; ; struct _Student stu50;9.1.4 結構體數(shù)組 例2: struct _Student char id10, name10; int score3, sum; stu50;例3: struct char id10, name10; int score3, sum; stu50;9.1.4 結構體數(shù)組 結構體數(shù)組的初始化結
15、構體數(shù)組的初始化與普通數(shù)組的初始化相似。 例如: struct _Student char id10, name10; int score3, sum; ;struct _Student stu3= 20050001, 胡樹偉, 87, 71, 81, 20050002, 李冬, 75, 85, 76, 20050003, 梁若嬋, 86, 75, 90;9.1.4 結構體數(shù)組 結構體數(shù)組的引用結構體數(shù)組的引用與結構體變量的引用相似。 例 結構體數(shù)組的引用 typedef struct _Student char id10; char name10; int score3; int sum;
16、Student; /*定義結構體類型別名*/9.1.4 結構體數(shù)組 void main( ) int i, j; Student stu50; /*定義結構體數(shù)組*/ for(i=0; i50; i+) scanf(%s%s%d%d%d, stui.id, , &stui.score0, &stui.score1, &stui.score2); for(stui.sum=0, j=0; j3; j+) stui.sum += stui.scorej; for(i=0; i50; i+) printf(%s,%s,%d,%d,%d,%dn, stui.id,
17、, stui.score0, stui.score1, stui.score2, stui.sum);9.1.4* 結構體數(shù)組名作為函數(shù)參數(shù) 結構體數(shù)組名作為函數(shù)參數(shù)與普通數(shù)組名作為函數(shù)參數(shù)相似,傳遞的也是數(shù)組的首地址。 例 結構體數(shù)組名作為函數(shù)參數(shù) typedef struct _Student char id10; char name10; int score3; int sum; Student; /*定義結構體類型別名*/ void sort(Student stu , int); /*函數(shù)原型聲明*/9.1.4* 結構體數(shù)組名作為函數(shù)參數(shù) void main( ) int i, j; Student stu50; /*定義結構體數(shù)組*/ for(i=0; i50; i+) scanf(%s%s%d%d%d, stui.id, , &stui.score0, &stui.score1, &stui.score2); for(stui.sum=0, j=0; j3; j+) stui.sum += stui.scorej; sort(stu, 50); for(i=0; i50; i+) printf(%s,%s,%d,%d,%d,%dn, stui.id, , stui.score0, stui.score1, stui
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《移動護理系統(tǒng)培訓》課件
- 2024版生產(chǎn)車間承包協(xié)議書
- 2025年度智能櫥柜定制采購合同8篇
- 2025年度家庭保姆雇傭與家庭關系維護合同4篇
- 二零二五年度新能源汽車使用權轉讓合同2025版4篇
- 二零二五年度地質(zhì)勘探打井合同范本4篇
- 二零二五年度離婚夫妻子女共同監(jiān)護權與生活費用支持協(xié)議3篇
- 2025年度個人環(huán)保項目借款合同示范文本4篇
- 二零二五版安全門銷售合同范本4篇
- 2025年度住宅轉租代理服務及傭金支付合同4篇
- 高考對聯(lián)題(對聯(lián)知識、高考真題及答案、對應練習題)
- 新版《鐵道概論》考試復習試題庫(含答案)
- 【律師承辦案件費用清單】(計時收費)模板
- 高中物理競賽真題分類匯編 4 光學 (學生版+解析版50題)
- Unit1FestivalsandCelebrations詞匯清單高中英語人教版
- 西方經(jīng)濟學-高鴻業(yè)-筆記
- 2024年上海市中考語文試題卷(含答案)
- 幼兒園美術教育研究策略國內(nèi)外
- 生豬養(yǎng)殖生產(chǎn)過程信息化與數(shù)字化管理
- (完整)六年級數(shù)學上冊寒假每天10道計算題5道應用題
- (2024年)版ISO9001質(zhì)量管理體系培訓教材
評論
0/150
提交評論