第7章 結(jié)構(gòu)體 共用體與枚舉_第1頁
第7章 結(jié)構(gòu)體 共用體與枚舉_第2頁
第7章 結(jié)構(gòu)體 共用體與枚舉_第3頁
第7章 結(jié)構(gòu)體 共用體與枚舉_第4頁
第7章 結(jié)構(gòu)體 共用體與枚舉_第5頁
已閱讀5頁,還剩49頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、2022-7-7第第7章章 結(jié)構(gòu)體結(jié)構(gòu)體1C C語言程序設(shè)計語言程序設(shè)計第第7 7章章 結(jié)構(gòu)體結(jié)構(gòu)體2022-7-7第第7章章 結(jié)構(gòu)體結(jié)構(gòu)體2【學(xué)習(xí)目標(biāo)學(xué)習(xí)目標(biāo)】掌握結(jié)構(gòu)類型的定義。掌握結(jié)構(gòu)類型的定義。掌握結(jié)構(gòu)類型變量的定義與使用。掌握結(jié)構(gòu)類型變量的定義與使用。了解共用體類型和枚舉類型。了解共用體類型和枚舉類型。2022-7-7第第7章章 結(jié)構(gòu)體結(jié)構(gòu)體37.1 7.1 結(jié)構(gòu)體類型結(jié)構(gòu)體類型7.2 結(jié)構(gòu)體變量 7.5 用戶定義類型第第7 7章章 結(jié)構(gòu)體與枚舉結(jié)構(gòu)體與枚舉 7.3 共用體類型7.4 枚舉類型2022-7-7第第7章章 結(jié)構(gòu)體結(jié)構(gòu)體4【問題問題】如何表示一個學(xué)生的基本信息?如何表示多

2、如何表示一個學(xué)生的基本信息?如何表示多個學(xué)生的基本信息?個學(xué)生的基本信息?學(xué)號學(xué)號姓名姓名性別性別年齡年齡地址地址(長整型長整型)(字符數(shù)組字符數(shù)組)(字符字符)(整型整型)(字符數(shù)組字符數(shù)組)7.1 7.1 結(jié)構(gòu)體類型結(jié)構(gòu)體類型2022-7-7第第7章章 結(jié)構(gòu)體結(jié)構(gòu)體5結(jié)構(gòu)體類型的定義:結(jié)構(gòu)體類型的定義:7.1 7.1 結(jié)構(gòu)體類型結(jié)構(gòu)體類型struct 結(jié)構(gòu)體名結(jié)構(gòu)體名 數(shù)據(jù)類型數(shù)據(jù)類型 成員名;成員名; 數(shù)據(jù)類型數(shù)據(jù)類型 成員名;成員名; .;成員類型可以是成員類型可以是基本類型或已定基本類型或已定義的構(gòu)造類型義的構(gòu)造類型struct是是關(guān)鍵關(guān)鍵字字, ,不能省略不能省略合法標(biāo)識符合法標(biāo)識

3、符可省略可省略:無名結(jié)構(gòu)體無名結(jié)構(gòu)體各成員項之間各成員項之間用用“;”隔開隔開構(gòu)造類型定義是構(gòu)造類型定義是C語語言語句,以言語句,以“;”結(jié)束結(jié)束P1752022-7-7第第7章章 結(jié)構(gòu)體結(jié)構(gòu)體6例如結(jié)構(gòu)體學(xué)生類型定義:例如結(jié)構(gòu)體學(xué)生類型定義: struct student /*struct student是結(jié)構(gòu)體類型名是結(jié)構(gòu)體類型名 */ /* 以下定義成員項的類型和名字以下定義成員項的類型和名字 */ long num; char name20; char sex; int age; char addr30; ;7.1 7.1 結(jié)構(gòu)體類型結(jié)構(gòu)體類型結(jié)構(gòu)體結(jié)構(gòu)體類型類型定義定義描描述結(jié)構(gòu)的組

4、織形式述結(jié)構(gòu)的組織形式,不分配內(nèi)存空間不分配內(nèi)存空間P1752022-7-7第第7章章 結(jié)構(gòu)體結(jié)構(gòu)體77.1 結(jié)構(gòu)體類型第第7 7章章 結(jié)構(gòu)體與枚舉結(jié)構(gòu)體與枚舉 7.5 用戶定義類型7.3 共用體類型7.4 枚舉類型2022-7-7第第7章章 結(jié)構(gòu)體結(jié)構(gòu)體87.2.1 7.2.1 結(jié)構(gòu)體變量的聲明結(jié)構(gòu)體變量的聲明結(jié)構(gòu)體變量的說明有三種方法:結(jié)構(gòu)體變量的說明有三種方法:1.先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體類型變量。先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體類型變量。struct 結(jié)構(gòu)體名結(jié)構(gòu)體名 數(shù)據(jù)類型數(shù)據(jù)類型 成員名;成員名; 數(shù)據(jù)類型數(shù)據(jù)類型 成員名;成員名; .;struct 結(jié)構(gòu)體名結(jié)構(gòu)體名 變量列

5、表;變量列表; struct student long num; char name20; char sex; int age; char addr30; ; struct student stu1,stu2; struct student stu3;可多次使用可多次使用P1752022-7-7第第7章章 結(jié)構(gòu)體結(jié)構(gòu)體97.2.1 7.2.1 結(jié)構(gòu)體變量的聲明結(jié)構(gòu)體變量的聲明2.在定義結(jié)構(gòu)體類型的同時定義結(jié)構(gòu)體變量在定義結(jié)構(gòu)體類型的同時定義結(jié)構(gòu)體變量struct 結(jié)構(gòu)體名結(jié)構(gòu)體名數(shù)據(jù)類型數(shù)據(jù)類型 成員名;成員名;數(shù)據(jù)類型數(shù)據(jù)類型 成員名;成員名; . 變量名列表;變量名列表;如:如: stru

6、ct student long num; char name20; char sex; int age; char addr30; stu4,stu5; struct student stu6;可多次使用可多次使用P1752022-7-7第第7章章 結(jié)構(gòu)體結(jié)構(gòu)體107.2.1 7.2.1 結(jié)構(gòu)體變量的聲明結(jié)構(gòu)體變量的聲明3.直接定義無名結(jié)構(gòu)體的同時定義結(jié)構(gòu)體變量直接定義無名結(jié)構(gòu)體的同時定義結(jié)構(gòu)體變量struct 數(shù)據(jù)類型數(shù)據(jù)類型 成員名;成員名; 數(shù)據(jù)類型數(shù)據(jù)類型 成員名;成員名; .變量名列表;變量名列表;用無名結(jié)構(gòu)體直接用無名結(jié)構(gòu)體直接定義變量只能一次定義變量只能一次如:如: struct

7、long num; char name20; char sex; int age; char addr30; stu7,stu8; P176幾點說明幾點說明u結(jié)構(gòu)體類型與結(jié)構(gòu)體變量概念不同結(jié)構(gòu)體類型與結(jié)構(gòu)體變量概念不同類型類型:不分配內(nèi)存;不分配內(nèi)存;變量變量:分配內(nèi)存分配內(nèi)存(所有成員之和)(所有成員之和)類型類型:不能賦值、存取、運算不能賦值、存取、運算; 變量變量:可以可以u結(jié)構(gòu)體成員名結(jié)構(gòu)體成員名(域名)與程序中變量名地位相同域名)與程序中變量名地位相同u結(jié)構(gòu)體可嵌套結(jié)構(gòu)體可嵌套例例 struct date int month; int day; int year; ; struct

8、student int num; char name20; struct date birthday; stu;numnamebirthdaymonthdayyear例例 struct student int num; char name20; struct date int month; int day; int year; birthday; stu; numnamebirthdaymonthdayyearchar name20int numchar sexint agechar addr304字節(jié)字節(jié)20字節(jié)字節(jié)1字節(jié)字節(jié)4字節(jié)字節(jié)30字節(jié)字節(jié).P176可用可用sizeof()來求來求2

9、022-7-7第第7章章 結(jié)構(gòu)體結(jié)構(gòu)體127.2.2 7.2.2 結(jié)構(gòu)體變量初始化結(jié)構(gòu)體變量初始化在定義結(jié)構(gòu)體變量的同時可以進行初始化賦值。在定義結(jié)構(gòu)體變量的同時可以進行初始化賦值。例如:例如: struct student long num; char name20; char sex; int age; char addr30; ; 注意:注意:初始化數(shù)據(jù)應(yīng)與類型定義中的各個成員在位置上初始化數(shù)據(jù)應(yīng)與類型定義中的各個成員在位置上一一對應(yīng)。一一對應(yīng)。struct student stu1=201001,Li Nin,18, M, 大學(xué)南路大學(xué)南路252號號, stu2=201002,Jing

10、 Qing,19, F, 淮南人民南路淮南人民南路361號號; P1772022-7-7第第7章章 結(jié)構(gòu)體結(jié)構(gòu)體137.2.2 7.2.2 結(jié)構(gòu)體變量初始化結(jié)構(gòu)體變量初始化 對于嵌套的結(jié)構(gòu)體類型變量,初始化是對各個基對于嵌套的結(jié)構(gòu)體類型變量,初始化是對各個基本類型的成員賦初值,本類型的成員賦初值,例:例:struct dateint year; int month;int day;struct student1long num; char name20; struct date birthday; stu11,stu12; struct student1 stu11=2010003,Lin L

11、ong,1993,12,5; 或者:或者:struct student1 stu11=2010003,Lin Long,1993,12,5; P1772022-7-7第第7章章 結(jié)構(gòu)體結(jié)構(gòu)體147.2.3 7.2.3 結(jié)構(gòu)體變量的引用結(jié)構(gòu)體變量的引用 引用規(guī)則引用規(guī)則 結(jié)構(gòu)體變量結(jié)構(gòu)體變量不能整體引用不能整體引用,只能引用變量成員只能引用變量成員可以將一個結(jié)構(gòu)體變量賦值給另一個結(jié)構(gòu)體變量可以將一個結(jié)構(gòu)體變量賦值給另一個結(jié)構(gòu)體變量結(jié)構(gòu)體嵌套時逐級引用結(jié)構(gòu)體嵌套時逐級引用成員成員(分量分量)運算符運算符優(yōu)先級優(yōu)先級: 1結(jié)合性結(jié)合性:從左向右從左向右引用方式:引用方式: 結(jié)構(gòu)體變量名結(jié)構(gòu)體變量名.

12、成員名成員名例例 struct student int num; char name20; char sex; int age; float score; char addr30; stu1,stu2; stu1.num=10;stu1.score=85.5;stu1.score+=stu2.score; stu1.age+;例例 struct student int num; char name20; char sex; int age; float score; char addr30; stu1,stu2; printf(“%d,%s,%c,%d,%f,%sn”,stu1); ( )st

13、u1=101,“Wan Lin”,M,19,87.5,“DaLian”; ( )例例 struct student int num; char name20; char sex; int age; float score; char addr30; stu1,stu2; stu2=stu1; ( )例例 struct student int num; char name20; struct date int month; int day; int year; birthday; stu1,stu2;numnamebirthdaymonthdayyearstu1.birthday.month=1

14、2;例例 struct student int num; char name20; char sex; int age; float score; char addr30; stu1,stu2; if(stu1=stu2). ( )P1782022-7-7第第7章章 結(jié)構(gòu)體結(jié)構(gòu)體157.2.3 7.2.3 結(jié)構(gòu)體變量的引用結(jié)構(gòu)體變量的引用【例例7-2】輸出結(jié)構(gòu)體數(shù)據(jù)輸出結(jié)構(gòu)體數(shù)據(jù)void main() struct student long num;char name20; int age; char sex;char address30;stu1=201001,Li Nin,18, M, 1

15、3 huaihe Road;struct dateint year; int month;int day;P1782022-7-7第第7章章 結(jié)構(gòu)體結(jié)構(gòu)體167.2.3 7.2.3 結(jié)構(gòu)體變量的引用結(jié)構(gòu)體變量的引用續(xù)續(xù)【例例7-2】struct student1long num;char name20; struct date birthday; char sex; char address30; stu11=201003,Lin Long,1993,12,5,M,13 huainan Road;printf(嵌套結(jié)構(gòu)體嵌套結(jié)構(gòu)體%s,%d,%dn,, stu11.birt

16、hday.year,stu11.birthday.month);printf(普通結(jié)構(gòu)體普通結(jié)構(gòu)體%s,%d,%sn,, stu1.age,stu1.address); 2022-7-7第第7章章 結(jié)構(gòu)體結(jié)構(gòu)體177.2.4 7.2.4 結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組1.結(jié)構(gòu)體數(shù)組的定義結(jié)構(gòu)體數(shù)組的定義 形式一形式一: : struct student int num; char name20; char sex; int age;struct student stu2;形式二形式二: :struct student int num; char name20; char sex; in

17、t age;stu2;形式三形式三:struct int num; char name20; char sex; int age;stu2;numnamesexagenumnamesexagestu0stu129BP1802022-7-7第第7章章 結(jié)構(gòu)體結(jié)構(gòu)體187.2.4 7.2.4 結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組2.結(jié)構(gòu)體數(shù)組的初始化結(jié)構(gòu)體數(shù)組的初始化 結(jié)構(gòu)體數(shù)組的一個元素相當(dāng)于一個結(jié)構(gòu)體變量,結(jié)構(gòu)體數(shù)組的一個元素相當(dāng)于一個結(jié)構(gòu)體變量,結(jié)構(gòu)體數(shù)組初始化即順序?qū)?shù)組元素初始化,方法與結(jié)構(gòu)體數(shù)組初始化即順序?qū)?shù)組元素初始化,方法與其他類型的數(shù)組賦初值的方法相同其他類型的數(shù)組賦初值的方法相同例例 str

18、uct int num; char name20; char sex; int age; stu =,;順序初始化順序初始化: struct student int num; char name20; char sex; int age; ;struct student stu3 =100,“Wang Lin”,M,20, 101,“Li Gang”,M,19, 110,“Liu Yan”,F,19; 分元素初始化分元素初始化: struct student int num; char name20; char sex; int age; ;struct student stu =100,“W

19、ang Lin”,M,20, 101,“Li Gang”,M,19, 110,“Liu Yan”,F,19; 全部初始化時長度可省略全部初始化時長度可省略P1802022-7-7第第7章章 結(jié)構(gòu)體結(jié)構(gòu)體197.2.4 7.2.4 結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組3.結(jié)構(gòu)體數(shù)組的引用。結(jié)構(gòu)體數(shù)組的引用。 (1) 除初始化外,對結(jié)構(gòu)體數(shù)組賦常數(shù)值、輸入除初始化外,對結(jié)構(gòu)體數(shù)組賦常數(shù)值、輸入和輸出、各種運算均是對和輸出、各種運算均是對結(jié)構(gòu)體數(shù)組元素的成員結(jié)構(gòu)體數(shù)組元素的成員(相當(dāng)于普通變量)進行的。(相當(dāng)于普通變量)進行的。 結(jié)構(gòu)體數(shù)組元素的成員表示為:結(jié)構(gòu)體數(shù)組元素的成員表示為: 結(jié)構(gòu)體數(shù)組名結(jié)構(gòu)體數(shù)組名下標(biāo)

20、下標(biāo).成員名成員名在嵌套的情況下為:在嵌套的情況下為: 結(jié)構(gòu)體數(shù)組名結(jié)構(gòu)體數(shù)組名下標(biāo)下標(biāo).結(jié)構(gòu)體成員名結(jié)構(gòu)體成員名. 成員名成員名 struct student int num; char name20; char sex; int age; str3;strcpy(,”ZhaoDa”);stu1.age+;P1812022-7-7第第7章章 結(jié)構(gòu)體結(jié)構(gòu)體207.2.4 7.2.4 結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組(2) 結(jié)構(gòu)體數(shù)組元素可相互賦值結(jié)構(gòu)體數(shù)組元素可相互賦值例如:例如:stu211=stu212;對于結(jié)構(gòu)體數(shù)組元素內(nèi)嵌的結(jié)構(gòu)體類型成員,情況對于結(jié)構(gòu)體數(shù)組元素內(nèi)嵌的結(jié)構(gòu)體類型成

21、員,情況也相同。如:也相同。如: stu312.birthday=stu311.birthday; (3) 其他注意事項也與結(jié)構(gòu)體變量的引用相同,其他注意事項也與結(jié)構(gòu)體變量的引用相同, 例如:不允許對結(jié)構(gòu)體數(shù)組元素或結(jié)構(gòu)體數(shù)組元例如:不允許對結(jié)構(gòu)體數(shù)組元素或結(jié)構(gòu)體數(shù)組元素內(nèi)嵌的結(jié)構(gòu)體類型成員整體賦(常數(shù))值;不允許素內(nèi)嵌的結(jié)構(gòu)體類型成員整體賦(常數(shù))值;不允許對結(jié)構(gòu)體數(shù)組元素或結(jié)構(gòu)體數(shù)組元素內(nèi)嵌的結(jié)構(gòu)體類對結(jié)構(gòu)體數(shù)組元素或結(jié)構(gòu)體數(shù)組元素內(nèi)嵌的結(jié)構(gòu)體類型成員整體進行輸入輸出等。型成員整體進行輸入輸出等。 P1822022-7-7第第7章章 結(jié)構(gòu)體結(jié)構(gòu)體217.2.4 7.2.4 結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體

22、數(shù)組 在處理結(jié)構(gòu)體問題時經(jīng)常涉及在處理結(jié)構(gòu)體問題時經(jīng)常涉及字符或字符串字符或字符串的的輸入,這時要注意:輸入,這時要注意:scanf()函數(shù)用函數(shù)用%s輸入字符串輸入字符串遇空格即結(jié)束,因遇空格即結(jié)束,因此輸入帶空格的字符串可改用此輸入帶空格的字符串可改用gets()函數(shù)函數(shù)。字符串處理使用字符串函數(shù)。字符串處理使用字符串函數(shù)。在輸入字符類型數(shù)據(jù)時往往得到的是空白符(空在輸入字符類型數(shù)據(jù)時往往得到的是空白符(空格、回車等),甚至運行終止,因此常作相應(yīng)處理格、回車等),甚至運行終止,因此常作相應(yīng)處理,即在,即在適當(dāng)?shù)牡胤皆黾舆m當(dāng)?shù)牡胤皆黾觛etchar();空輸入語句,;空輸入語句,以以消除緩沖

23、區(qū)中的空白符。消除緩沖區(qū)中的空白符。 2022-7-7第第7章章 結(jié)構(gòu)體結(jié)構(gòu)體227.2.4 7.2.4 結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組【例例7-4】已知已知15人(人數(shù)可以通過宏定義改變)參加選人(人數(shù)可以通過宏定義改變)參加選舉,共三個候選人,候選人的基本信息定義在結(jié)構(gòu)體類舉,共三個候選人,候選人的基本信息定義在結(jié)構(gòu)體類型當(dāng)中,包括候選人的標(biāo)識號型當(dāng)中,包括候選人的標(biāo)識號id(整型),候選人的姓(整型),候選人的姓名名name(字符型數(shù)組),得票數(shù)(字符型數(shù)組),得票數(shù)count(整型整型)。選舉時投。選舉時投票即輸入三個人的標(biāo)識號(票即輸入三個人的標(biāo)識號(id成員項,分別取成員項,分別取1、2、3

24、),),統(tǒng)計每位候選人得票數(shù)。統(tǒng)計每位候選人得票數(shù)。 #include stdio.h“ #define NUMBER 15 struct candidate int id; char name20; int count; nominee3=1,李寧李寧,0,2,王新王新,0,3,趙廣趙廣,0; 2022-7-7第第7章章 結(jié)構(gòu)體結(jié)構(gòu)體237.2.4 7.2.4 結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組void main() int i,num; for(i=0;iNUMBER;i+) scanf(%d,&num); switch (num) case 1: nominee0.count+; break; cas

25、e 2: nominee1.count+; break; case 3: nominee2.count+; break; default: printf(輸入錯誤,沒有該提名人輸入錯誤,沒有該提名人n); for(i=0;i成員成員如:如: stu stu1,*p=&stu1; 結(jié)構(gòu)變量結(jié)構(gòu)變量stu1的成員的成員stu1.num可表示可表示為:為: (*p).num 或者或者 p-numP1852022-7-7第第7章章 結(jié)構(gòu)體結(jié)構(gòu)體267.2.5 7.2.5 結(jié)構(gòu)體指針結(jié)構(gòu)體指針2.結(jié)構(gòu)體數(shù)組與結(jié)構(gòu)體指針變量結(jié)構(gòu)體數(shù)組與結(jié)構(gòu)體指針變量 一維數(shù)組的數(shù)組名代表數(shù)組的首地址,一維結(jié)一維數(shù)組的數(shù)組

26、名代表數(shù)組的首地址,一維結(jié)構(gòu)體數(shù)組也一樣。可以將構(gòu)體數(shù)組也一樣。可以將一維結(jié)構(gòu)體數(shù)組名賦給指一維結(jié)構(gòu)體數(shù)組名賦給指向結(jié)構(gòu)體變量的指針變量向結(jié)構(gòu)體變量的指針變量,該指針變量將指向下標(biāo),該指針變量將指向下標(biāo)為為0 0的元素,它可以的元素,它可以在數(shù)組元素之間移動。在數(shù)組元素之間移動。 2022-7-7第第7章章 結(jié)構(gòu)體結(jié)構(gòu)體277.2.5 7.2.5 結(jié)構(gòu)體指針結(jié)構(gòu)體指針【例例7-7】利用結(jié)構(gòu)體指針變量輸出結(jié)構(gòu)體數(shù)組數(shù)據(jù)利用結(jié)構(gòu)體指針變量輸出結(jié)構(gòu)體數(shù)組數(shù)據(jù)#include stdio.hvoid main() struct student long num;char name20; int age

27、; char sex;char address30;stu3=201001,李寧李寧,18, M, 淮南大學(xué)南路淮南大學(xué)南路252號號, 201002,清青清青,18, F, 淮南人民南路淮南人民南路361號號, 201003,王新王新,20, M, 淮南國慶路淮南國慶路196號號 ; 2022-7-7第第7章章 結(jié)構(gòu)體結(jié)構(gòu)體287.2.5 7.2.5 結(jié)構(gòu)體指針結(jié)構(gòu)體指針struct student *p,*q; /聲明結(jié)構(gòu)體指針聲明結(jié)構(gòu)體指針char *pt;int i;for(p=stu; pnum, p-name, p-age,p-sex,p-address);q=(struct st

28、udent *); /強制類型轉(zhuǎn)換強制類型轉(zhuǎn)換 for(p=q;pq+3;p+) printf(%st,p);for(i=0;i3;i+) pt=; printf(%st,pt); 2022-7-7第第7章章 結(jié)構(gòu)體結(jié)構(gòu)體297.2.6 7.2.6 結(jié)構(gòu)體與函數(shù)結(jié)構(gòu)體與函數(shù)1.結(jié)構(gòu)體變量和結(jié)構(gòu)體變量成員做函數(shù)參數(shù)結(jié)構(gòu)體變量和結(jié)構(gòu)體變量成員做函數(shù)參數(shù) (1) 結(jié)構(gòu)體變量成員作為函數(shù)的實參結(jié)構(gòu)體變量成員作為函數(shù)的實參 由于結(jié)構(gòu)體變量成員存放基本類型數(shù)據(jù),因此這由于結(jié)構(gòu)體變量成員存放基本類型數(shù)據(jù),因此這種情況種情況同基本類型有值變量做實參同基本類型有值變量做實參,

29、實現(xiàn)值傳遞。,實現(xiàn)值傳遞。要注意實參與形參類型的一致。要注意實參與形參類型的一致。 【例例7-8】輸入結(jié)構(gòu)體數(shù)組中學(xué)生的學(xué)號和姓名。輸入結(jié)構(gòu)體數(shù)組中學(xué)生的學(xué)號和姓名。 #include stdio.hvoid print(long num1,char *p) printf(學(xué)號學(xué)號:%ldt姓名:姓名:%sn, num1,p);P1862022-7-7第第7章章 結(jié)構(gòu)體結(jié)構(gòu)體307.2.6 7.2.6 結(jié)構(gòu)體與函數(shù)結(jié)構(gòu)體與函數(shù)void main() struct student long num;char name20; int age; char sex;char address30;stu

30、3=201001,李寧李寧,18, M, 淮南大學(xué)南路淮南大學(xué)南路252號號, 201002,清青清青,18, F, 淮南人民南路淮南人民南路361號號, 201003,王新王新,20, M, 淮南國慶路淮南國慶路196號號 ;int i;for(i=0;i3;i+) print(stui.num,); 2022-7-7第第7章章 結(jié)構(gòu)體結(jié)構(gòu)體317.2.6 7.2.6 結(jié)構(gòu)體與函數(shù)結(jié)構(gòu)體與函數(shù)(2) 結(jié)構(gòu)體變量作為函數(shù)參數(shù)結(jié)構(gòu)體變量作為函數(shù)參數(shù)這種用法的參數(shù)形式為:這種用法的參數(shù)形式為:形參:結(jié)構(gòu)體變量;形參:結(jié)構(gòu)體變量;實參:有值結(jié)構(gòu)體變量或結(jié)構(gòu)體數(shù)組元素。實參:有值結(jié)構(gòu)

31、體變量或結(jié)構(gòu)體數(shù)組元素。通過實參將相應(yīng)的結(jié)構(gòu)體類型數(shù)據(jù)傳給對應(yīng)的形參通過實參將相應(yīng)的結(jié)構(gòu)體類型數(shù)據(jù)傳給對應(yīng)的形參,實現(xiàn),實現(xiàn)傳值調(diào)用傳值調(diào)用,不同于數(shù)組作參數(shù)的傳址調(diào)用!,不同于數(shù)組作參數(shù)的傳址調(diào)用!【注意注意】在結(jié)構(gòu)體類型數(shù)據(jù)作為函數(shù)參數(shù)時,為了在結(jié)構(gòu)體類型數(shù)據(jù)作為函數(shù)參數(shù)時,為了在虛實結(jié)合時保持形參與實參類型的一致,應(yīng)將結(jié)構(gòu)在虛實結(jié)合時保持形參與實參類型的一致,應(yīng)將結(jié)構(gòu)體類型定義成外部的,即在所有函數(shù)之前定義結(jié)構(gòu)體體類型定義成外部的,即在所有函數(shù)之前定義結(jié)構(gòu)體類型。類型。 P1862022-7-7第第7章章 結(jié)構(gòu)體結(jié)構(gòu)體327.2.6 7.2.6 結(jié)構(gòu)體與函數(shù)結(jié)構(gòu)體與函數(shù)【例例7-9】 輸

32、出學(xué)生的全部信息。輸出學(xué)生的全部信息。#include stdio.hstruct student long num;char name20; int age; char sex;char address30;void print(struct student p) printf(學(xué)號學(xué)號:%ldt姓名:姓名:%st年齡:年齡:%dt性別:性別:%ct通訊地址:通訊地址:%sn, .num,,p.age,p.sex, p.address); 2022-7-7第第7章章 結(jié)構(gòu)體結(jié)構(gòu)體337.2.6 7.2.6 結(jié)構(gòu)體與函數(shù)結(jié)構(gòu)體與函數(shù)續(xù)續(xù)【例例7-9】 輸出學(xué)生的全部信息。輸出學(xué)生的

33、全部信息。void main() struct student stu3= 201001,李寧李寧,18, M, 淮南大學(xué)南路淮南大學(xué)南路252號號, 201002,清青清青,18, F, 淮南人民南路淮南人民南路361號號, 201003,王新王新,20, M, 淮南國慶路淮南國慶路196號號 ;int i;for(i=0;inum,p-name,p-age,p-sex,p-address);void main() struct student stu3= 201001,李寧李寧,18, M, 淮南大學(xué)南路淮南大學(xué)南路252號號, 201002,清青清青,18, F, 淮南人民南路淮南人民南

34、路361號號, 201003,王新王新,20, M, 淮南國慶路淮南國慶路196號號 ;int i;for(i=0;i3;i+) print(stu); 2022-7-7第第7章章 結(jié)構(gòu)體結(jié)構(gòu)體367.2.6 7.2.6 結(jié)構(gòu)體與函數(shù)結(jié)構(gòu)體與函數(shù)3.返回結(jié)構(gòu)體類型數(shù)據(jù)的函數(shù)返回結(jié)構(gòu)體類型數(shù)據(jù)的函數(shù) 函數(shù)返回值可以是結(jié)構(gòu)體類型的值,也可以是指向結(jié)函數(shù)返回值可以是結(jié)構(gòu)體類型的值,也可以是指向結(jié)構(gòu)體變量(或數(shù)組元素)的指針。構(gòu)體變量(或數(shù)組元素)的指針。當(dāng)函數(shù)返回值是結(jié)構(gòu)體當(dāng)函數(shù)返回值是結(jié)構(gòu)體類型的值時,稱該函數(shù)為結(jié)構(gòu)體類型函數(shù);當(dāng)函數(shù)返回值類型的值時,稱該函數(shù)為結(jié)構(gòu)體類型函數(shù);當(dāng)函數(shù)返回值是指向結(jié)

35、構(gòu)體類型存儲單元的指針時,稱該函數(shù)為結(jié)構(gòu)體是指向結(jié)構(gòu)體類型存儲單元的指針時,稱該函數(shù)為結(jié)構(gòu)體類型指針函數(shù)。類型指針函數(shù)。【例例7-11】查找并輸出學(xué)號為查找并輸出學(xué)號為201001學(xué)生的全部信息,查學(xué)生的全部信息,查找用結(jié)構(gòu)體類型函數(shù)實現(xiàn)。找用結(jié)構(gòu)體類型函數(shù)實現(xiàn)。 #include stdio.hstruct student long num;char name20; int age; char sex;char address30; 2022-7-7第第7章章 結(jié)構(gòu)體結(jié)構(gòu)體377.2.6 7.2.6 結(jié)構(gòu)體與函數(shù)結(jié)構(gòu)體與函數(shù)struct student find(struct student

36、 p,int n)int i; for(i=0;i成員名成員名共用體變量名共用體變量名.成員名成員名(*共用體指針名共用體指針名).成員名成員名union data int i; char ch; float f; ;union data a,b,c,*p,d3;a.i a.ch a.fp-i p-ch p-f(*p).i (*p).ch (*p).fd0.i d0.ch d0.f共用體變量中起作用的成員是最后一次存放的成員共用體變量中起作用的成員是最后一次存放的成員例例 union int i; char ch; float f; a; a=1; ( ) 共用體變量在定義時只能共用體變量在定

37、義時只能初始化第一個成員初始化第一個成員例例 union int i; char ch; float f; a=1,a,1.5; ( ) 可以用一個共用體變量為另一個變量賦值可以用一個共用體變量為另一個變量賦值例例 float x; union int i; char ch; float f; a,b; a.i=1; a.ch=a; a.f=1.5; b=a; ( ) x=a.f; ( )P196例例 將一個整數(shù)按字節(jié)輸出將一個整數(shù)按字節(jié)輸出01100001 01000001低字節(jié)低字節(jié)高字節(jié)高字節(jié)0100000101100001ch0ch1運行結(jié)果:運行結(jié)果:i=60501ch0=101,c

38、h1=141ch0=A,ch1=a void main() union int_char int i; char ch2; x; x.i=24897; printf(i=%on,x.i); printf(ch0=%o,ch1=%on ch0=%c,ch1=%cn, x.ch0,x.ch1,x.ch0,x.ch1);結(jié)構(gòu)體與共用體結(jié)構(gòu)體與共用體區(qū)別區(qū)別: 存儲方式不同存儲方式不同struct node char ch2; int k;a;union node char ch2; int k;b;achkbch k變量的各成員同時存在變量的各成員同時存在任一時刻只有一個成員存在任一時刻只有一個成員

39、存在聯(lián)系聯(lián)系: 兩者可相互嵌套兩者可相互嵌套2022-7-7第第7章章 結(jié)構(gòu)體結(jié)構(gòu)體447.1 結(jié)構(gòu)體類型7.2 結(jié)構(gòu)體變量 7.5 用戶定義類型 7.3 共用體類型7.4 7.4 枚舉類型枚舉類型2022-7-7第第7章章 結(jié)構(gòu)體結(jié)構(gòu)體45 枚舉類型用于聲明一組命名的常數(shù),枚舉類型用于聲明一組命名的常數(shù),當(dāng)一個變量當(dāng)一個變量只只有幾種可能的取值時有幾種可能的取值時,可以將它定義為枚舉類型。,可以將它定義為枚舉類型。1.枚舉類型定義枚舉類型定義enum 枚舉名枚舉名枚舉元素名枚舉元素名1,枚舉元素名,枚舉元素名2,枚,枚舉元素名舉元素名n;(1) 枚舉型是一個集合,集合中的元素枚舉型是一個集合

40、,集合中的元素(枚舉成員枚舉成員)是一些是一些命名的整型常量,元素之間用逗號命名的整型常量,元素之間用逗號,隔開。隔開。(2) 枚舉名是一個標(biāo)識符,可以看成這個集合的名字,枚舉名是一個標(biāo)識符,可以看成這個集合的名字,是一個可選項,即是可有可無的。是一個可選項,即是可有可無的。(3) 第一個枚舉成員的默認值為整型的第一個枚舉成員的默認值為整型的0,后續(xù)枚舉成員,后續(xù)枚舉成員的值在前一個成員上加的值在前一個成員上加1。(4) 可以人為設(shè)定枚舉成員的值,對于沒有指定值的元可以人為設(shè)定枚舉成員的值,對于沒有指定值的元素,在前一個成員的基礎(chǔ)上加素,在前一個成員的基礎(chǔ)上加1。(5) 類型定義以分號類型定義

41、以分號;結(jié)束。結(jié)束。P1972022-7-7第第7章章 結(jié)構(gòu)體結(jié)構(gòu)體462.枚舉類型變量枚舉類型變量方法一:枚舉類型的定義和變量的聲明分開方法一:枚舉類型的定義和變量的聲明分開enum DAYMON=1, TUE, WED, THU, FRI, SAT, SUN;enum DAY yesterday;方法二:類型定義與變量聲明同時進行方法二:類型定義與變量聲明同時進行enum saturday,sunday = 0,monday,tuesday, wednesday, thursday,friday workday; 注:枚舉類型變量是指將變量的值一一列出來注:枚舉類型變量是指將變量的值一一列

42、出來,變量變量的值只限于列舉出來的值的范圍。的值只限于列舉出來的值的范圍。P1982022-7-7473.枚舉類型變量的應(yīng)用枚舉類型變量的應(yīng)用【例【例7-17】枚舉類型變量的使用。】枚舉類型變量的使用。#include void main() enum DAY Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday ; enum DAY yesterday, today, tomorrow; yesterday = Friday; today = (enum DAY) (yesterday + 1); tomorrow =

43、(enum DAY) 10; printf(%d %d %d n, yesterday, today, tomorrow); tomorrow = 10P1982022-7-7第第7章章 結(jié)構(gòu)體結(jié)構(gòu)體487.1 結(jié)構(gòu)體類型7.2 結(jié)構(gòu)體變量 7.3 共用體類型7.4 枚舉類型2022-7-7第第7章章 結(jié)構(gòu)體結(jié)構(gòu)體491.給基本類型取給基本類型取“別名別名” 定義的形式為:定義的形式為: typedef 類型名類型名 標(biāo)識符;標(biāo)識符;注意:注意:“類型名類型名”必須是系統(tǒng)提供的數(shù)據(jù)類型必須是系統(tǒng)提供的數(shù)據(jù)類型或用戶已定義的數(shù)據(jù)類型。例如:或用戶已定義的數(shù)據(jù)類型。例如:typedef int I

44、NTEGER; /給給int起別名起別名INTEGERtypedef char * CHARP;CHARP p, q;等價于:等價于: char * p, *q;P1992022-7-7第第7章章 結(jié)構(gòu)體結(jié)構(gòu)體502.數(shù)組類型定義數(shù)組類型定義 定義的形式為:定義的形式為: typedef 類型名類型名 數(shù)組名數(shù)組名n; 例如:例如:typedef char STR120; /給字符數(shù)組起別名給字符數(shù)組起別名 STR1 s1,s2,s3; 等價于:等價于:char s120,s220,s320; P1992022-7-7第第7章章 結(jié)構(gòu)體結(jié)構(gòu)體513.結(jié)構(gòu)類型定義結(jié)構(gòu)類型定義定義的形式為:定義的形式為:type

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論