第10章結(jié)構(gòu)體與共用體pp課件_第1頁(yè)
第10章結(jié)構(gòu)體與共用體pp課件_第2頁(yè)
第10章結(jié)構(gòu)體與共用體pp課件_第3頁(yè)
第10章結(jié)構(gòu)體與共用體pp課件_第4頁(yè)
第10章結(jié)構(gòu)體與共用體pp課件_第5頁(yè)
已閱讀5頁(yè),還剩51頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第第10章章 結(jié)構(gòu)體與共用體結(jié)構(gòu)體與共用體概述概述結(jié)構(gòu)體結(jié)構(gòu)體共用體共用體枚舉類型枚舉類型2結(jié)構(gòu)簡(jiǎn)介結(jié)構(gòu)簡(jiǎn)介存儲(chǔ)一個(gè)班級(jí)中 5 名學(xué)員的信息(學(xué)號(hào)、姓名、性別和成績(jī))問(wèn)題:i. 使用數(shù)組maryjohnpeterrosekatefmfmf01020304058978.56797.564解決方案:scorenumsexname不能建立數(shù)組間的關(guān)系ii. 使用多維數(shù)組maryjohnpeterrosekatefmfmf01020304058978.56797.564c 語(yǔ)言不允許一個(gè)數(shù)組包含多種數(shù)據(jù)類型iii. 使用結(jié)構(gòu)numnamesexscorec 語(yǔ)言引入了稱為結(jié)構(gòu)的數(shù)據(jù)存儲(chǔ)方式“結(jié)構(gòu)” 是

2、一種構(gòu)造數(shù)據(jù)類型,它是由若干數(shù)據(jù)項(xiàng)組合而成的復(fù)雜數(shù)據(jù)對(duì)象,這些數(shù)據(jù)項(xiàng)稱為結(jié)構(gòu)的成員。10.1 概述概述%結(jié)構(gòu)體(結(jié)構(gòu)體(structurestructure)是用戶自定義的一種是用戶自定義的一種數(shù)據(jù)類數(shù)據(jù)類型型,包含若干個(gè)類型不同的數(shù)據(jù)項(xiàng)。,包含若干個(gè)類型不同的數(shù)據(jù)項(xiàng)。%用途用途:把把不同類型不同類型的數(shù)據(jù)組合成一個(gè)整體。的數(shù)據(jù)組合成一個(gè)整體。而分別而分別用獨(dú)立變量來(lái)表示不能反映它們之間的內(nèi)在聯(lián)系。用獨(dú)立變量來(lái)表示不能反映它們之間的內(nèi)在聯(lián)系。例:定義一個(gè)結(jié)構(gòu)體類型例:定義一個(gè)結(jié)構(gòu)體類型studentstudent,包,包含學(xué)號(hào)、姓名、性別、年齡、成績(jī)、含學(xué)號(hào)、姓名、性別、年齡、成績(jī)、家庭地址。

3、家庭地址。10.1 概述概述%結(jié)構(gòu)體類型的定義結(jié)構(gòu)體類型的定義structstruct 結(jié)構(gòu)體名結(jié)構(gòu)體名 類型標(biāo)識(shí)符類型標(biāo)識(shí)符 成員名成員名1 1; 類型標(biāo)識(shí)符類型標(biāo)識(shí)符 成員名成員名2 2; ;struct是是關(guān)鍵字關(guān)鍵字,不能省略不能省略合法標(biāo)識(shí)符合法標(biāo)識(shí)符可省略:無(wú)名結(jié)構(gòu)體可省略:無(wú)名結(jié)構(gòu)體成員類型可以是基本成員類型可以是基本類型或構(gòu)造類型類型或構(gòu)造類型必須有分號(hào)必須有分號(hào)5 定義結(jié)構(gòu)定義結(jié)構(gòu)struct structurenamedatatype variable1;datatype variable2;.;結(jié)構(gòu)成員;結(jié)構(gòu)名structstudentint num;char name2

4、0;char sex;定義結(jié)構(gòu)float score;c 語(yǔ)言中的有效數(shù)據(jù)類型6定義結(jié)構(gòu)定義結(jié)構(gòu)struct student int num; char name20; char sex; float score;numnamesexstudent 結(jié)構(gòu)定義并不預(yù)留內(nèi)存 結(jié)構(gòu)定義放置在程序的開始部分,位于頭文件聲明之后 score 結(jié)構(gòu)定義僅描述了一個(gè)結(jié)構(gòu)的形式。如果要在程序里使用結(jié)構(gòu),需要聲明結(jié)構(gòu)變量。struct date int year; int month; int day; ;struct std_info int num ; char name20; char sex; floa

5、t score; char addr30; struct date birthday; ; 日期結(jié)構(gòu)體類型日期結(jié)構(gòu)體類型:由年、:由年、月、日三項(xiàng)組成月、日三項(xiàng)組成學(xué)生信息結(jié)構(gòu)類型學(xué)生信息結(jié)構(gòu)類型:由學(xué):由學(xué)號(hào)、姓名、性別、成績(jī)、號(hào)、姓名、性別、成績(jī)、地址和生日共地址和生日共6 6項(xiàng)組成項(xiàng)組成可以改寫成可以改寫成int year,mongth,day;10.1.1結(jié)構(gòu)體變量的定義結(jié)構(gòu)體變量的定義&間接定義法間接定義法:先先定義結(jié)構(gòu)體定義結(jié)構(gòu)體類型類型,后后定義結(jié)構(gòu)體定義結(jié)構(gòu)體變量變量struct student int num ; char name20; char sex; int

6、age; float score; char addr30; ; struct student stu1,stu2;&直接定義法直接定義法:在定義結(jié)構(gòu)類型的同時(shí),在定義結(jié)構(gòu)類型的同時(shí),定義結(jié)構(gòu)變量定義結(jié)構(gòu)變量struct student int num ; char name20; char sex; int age; float score; char addr30; stu1,stu2;結(jié)構(gòu)體類型名結(jié)構(gòu)體類型名student可以不寫可以不寫struct student int num ; char name20; char sex; int age; float score; ch

7、ar addr30; stu1,stu2;stu1:num name sex age score addr22012430stu1stu1在內(nèi)存中共占字節(jié)數(shù):在內(nèi)存中共占字節(jié)數(shù):2+20+1+2+4+30=592+20+1+2+4+30=5910.1.3 結(jié)構(gòu)體變量的引用結(jié)構(gòu)體變量的引用結(jié)構(gòu)體變量的引用原則結(jié)構(gòu)體變量不能整體輸入輸出,要通過(guò)成員運(yùn)算結(jié)構(gòu)體變量不能整體輸入輸出,要通過(guò)成員運(yùn)算符符“. .”,逐個(gè)逐個(gè)訪問(wèn)其成員,且訪問(wèn)的格式為:訪問(wèn)其成員,且訪問(wèn)的格式為: 結(jié)構(gòu)體變量結(jié)構(gòu)體變量. .成員成員 struct date int year; int month; int day; ;st

8、ruct date birth;printf(%d,%d,%dprintf(%d,%d,%d,birth)birth);printf(%d,%d,%dprintf(%d,%d,%d,birth.year,birth.year,birth.month,birth.day)birth.month,birth.day); “. .”是成員運(yùn)算符,是成員運(yùn)算符,優(yōu)先級(jí)最高優(yōu)先級(jí)最高如果某成員本身又是一個(gè)結(jié)構(gòu)類型,則只能通過(guò)多級(jí)的分量運(yùn)如果某成員本身又是一個(gè)結(jié)構(gòu)類型,則只能通過(guò)多級(jí)的分量運(yùn)算,對(duì)最低一級(jí)的成員進(jìn)行引用。算,對(duì)最低一級(jí)的成員進(jìn)行引用。 結(jié)構(gòu)變量結(jié)構(gòu)變量. .成員成員. .子成員子成員. .

9、 .最低級(jí)子成員最低級(jí)子成員引用結(jié)構(gòu)變量引用結(jié)構(gòu)變量studentstudent中的中的birthdaybirthday成員的格式分別為:成員的格式分別為:student.birthday.yearstudent.birthday.yearstudent.birthday.monthstudent.birthday.monthstudent.birthday.daystudent.birthday.day結(jié)構(gòu)體變量的引用原則struct std_info int num ; char name20; char sex; float score; struct date birthday; st

10、udent; struct date int year; int month; int day; ;num name sex score birthdaystudent:對(duì)最低一級(jí)成員,可像同類型的普通變量一樣,進(jìn)行對(duì)最低一級(jí)成員,可像同類型的普通變量一樣,進(jìn)行相應(yīng)的各種運(yùn)算。相應(yīng)的各種運(yùn)算。結(jié)構(gòu)體變量的初始化結(jié)構(gòu)體變量的初始化8一般形式一般形式 結(jié)構(gòu)體類型名結(jié)構(gòu)體類型名 結(jié)構(gòu)體變量結(jié)構(gòu)體變量=初值表初值表 ;8說(shuō)明說(shuō)明 若某成員本身又是結(jié)構(gòu)體類型,則該成員的初值為一個(gè)初值表若某成員本身又是結(jié)構(gòu)體類型,則該成員的初值為一個(gè)初值表 初值的數(shù)據(jù)類型,應(yīng)與結(jié)構(gòu)變量中相應(yīng)成員的類型一致初值的數(shù)據(jù)類型,

11、應(yīng)與結(jié)構(gòu)變量中相應(yīng)成員的類型一致struct std_info int num ; char name20; char sex; float score; struct date birthday; ;struct std_info student=102, zhangsanzhangsan, m, 85, 1980,9,20 ; struct student int num; char name20; char sex; float score;struct student student1,student2;內(nèi)存student1struct student student1=1,yao m

12、ing ,m,90.5; 1yao mingm賦值的順序應(yīng)與成員聲明時(shí)的順序一樣;允許初始化語(yǔ)句中的值的數(shù)目比結(jié)構(gòu)成員數(shù)目少。student1.sex90.5student1.score結(jié)構(gòu)變量初始化結(jié)構(gòu)變量初始化student2student2.num=1;=zhang zi liang;student2.sex=m;printf(請(qǐng)輸入成績(jī):請(qǐng)輸入成績(jī):n);scanf(%f,&student2.score);結(jié)構(gòu)變量賦值結(jié)構(gòu)變量賦值1zhang zi liang mq 用輸入語(yǔ)句或賦值語(yǔ)句來(lái)給結(jié)構(gòu)變量的各

13、個(gè)成員賦值7878student3 = student2; student31zhang zi liang m78問(wèn)題描述:根據(jù)學(xué)員的成績(jī),輸出不及格學(xué)員的詳細(xì)信息。 使用結(jié)構(gòu)示例使用結(jié)構(gòu)示例#includestruct studentint num;/學(xué)號(hào)char *name;/姓名char sex;/性別float score;/成績(jī);void main() static struct student stu1=1,李亞鵬,m,61; static struct student stu2=2,周晶晶,f,92.5; static struct student stu3=3,姚光明,m,59

14、; printf(不及格學(xué)員的名單如下:n); if(stu1.score60) printf(%dt%st%ct%5.2fn,stu1.num,,stu1.sex,stu1.score); if(stu2.score60) printf(%dt%st%ct%5.2fn,stu2.num,,stu2.sex,stu2.score); if(stu3.score=60 & stu2.score=60 & stu3.score=60) printf(沒有不及格的學(xué)員。n);不及格學(xué)員的名單如下:3 姚光明 m 59.00stu11李亞鵬m78st

15、u22周晶晶f92stu33姚光明m59struct std_info int num ; char name20; char sex; struct date birthday; ;main() struct std_info stu=102, zhangsanzhangsan, m, 1980,9,20 ; printf(num: %dn,stu.num); printf(name: %sn,); printf(sex: %cn,stu.sex); printf(birthday: %d-%d-%dn,stu.birthday.year, stu.birthday.mont

16、h, stu.birthday.day); 例例 定義一個(gè)結(jié)構(gòu)變量定義一個(gè)結(jié)構(gòu)變量stustu,用于存儲(chǔ)和顯示一個(gè)學(xué)生的基本,用于存儲(chǔ)和顯示一個(gè)學(xué)生的基本 情況。情況。struct std_info stu;scanf(%d%s %c%d%d%d,&stu.num,,&stu.sex,&stu.birthday.year,&stu.birthday.month,&stu.birthday.day);10.2結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組o定義:定義:結(jié)構(gòu)數(shù)組的每一個(gè)元素,都是結(jié)構(gòu)類型數(shù)據(jù),結(jié)構(gòu)數(shù)組的每一個(gè)元素,都是結(jié)構(gòu)類型數(shù)據(jù),均包含結(jié)構(gòu)類型的所有

17、成員。均包含結(jié)構(gòu)類型的所有成員。struct student int num ; char name20; char sex; int age; float score; ;struct student stu3 ; 101lilinm 1887.5102zhanghuam 1899103wulif1978.5stu0stu1stu2o結(jié)構(gòu)體數(shù)組初始化:結(jié)構(gòu)體數(shù)組初始化:結(jié)構(gòu)體類型名結(jié)構(gòu)體類型名 結(jié)構(gòu)體數(shù)組名結(jié)構(gòu)體數(shù)組名nn 初值表初值表1 1 , 初值表初值表2 2 , ., 初值表初值表n n ; struct student int num ; char name20; char sex

18、; int age; float score; ;struct student stu3101,lilin,m,18,87.5, 102,zhanghua,m,18,99,103,wuli,f,19,78.5 ; 例例 定義結(jié)構(gòu)類型定義結(jié)構(gòu)類型struct std_infostruct std_info,定義一個(gè)結(jié)構(gòu)數(shù)組,定義一個(gè)結(jié)構(gòu)數(shù)組stustu,用于存儲(chǔ)和顯示三個(gè)學(xué)生的基本情況。,用于存儲(chǔ)和顯示三個(gè)學(xué)生的基本情況。struct date int year; int month; int day; ;struct std_info int num ; char name20; char s

19、ex; struct date birthday; stu3=102,zhangsan,m,1980,9,20, 105,lisi,m,1980,8,15, 112,wangwu,f,1980,3,10 ;main() int i; printf(no. name sex birthdayn); for(i=0; i3; i+) printf(%-7d,stui.num); printf(%-9s,); printf(%-4c,stui.sex); printf(%d-%d-%dn,stui.birthday.year, stui.birthday.month,stui.bi

20、rthday.day); 程序運(yùn)行結(jié)果:程序運(yùn)行結(jié)果:no. name sex birthdayno. name sex birthday102 zhangsan m 1980-9-20102 zhangsan m 1980-9-20105 lisi m 1980-8-15105 lisi m 1980-8-15112 wangwu f 1980-3-10112 wangwu f 1980-3-10 統(tǒng)計(jì)后選人選票統(tǒng)計(jì)后選人選票struct person char name20; int count;leader3=“l(fā)ian”,0,“abian”,0,”song“,0; main() int

21、 i,j; char leader_name20; for(i=1;i=10;i+) scanf(%s,leader_name); for(j=0;j3;j+)if(strcmp(leader_name,)=0) leaderj.count+; for(i=0;inum=101; strcpy(p-name,lilin);引用結(jié)構(gòu)體變量成員的三種形式:引用結(jié)構(gòu)體變量成員的三種形式:v結(jié)構(gòu)體變量結(jié)構(gòu)體變量.成員名成員名stu.numv(*p).成員名成員名(*p).numvp-成員名成員名 p-num若若struct student stu;struct student

22、*p=&stu;則;則結(jié)構(gòu)體成員運(yùn)算符結(jié)構(gòu)體成員運(yùn)算符 . . 和和 - 的比較:的比較:二者的優(yōu)先級(jí)相同,自左向右結(jié)合二者的優(yōu)先級(jí)相同,自左向右結(jié)合運(yùn)算符運(yùn)算符 . . 前面只能是前面只能是結(jié)構(gòu)體變量名結(jié)構(gòu)體變量名或或( (* *p)p)運(yùn)算符運(yùn)算符 - 前面只能是前面只能是指向結(jié)構(gòu)體的指針變量指向結(jié)構(gòu)體的指針變量名名,不能是其它變量名,不能是其它變量名 stu-numstu-num 分析下列表達(dá)式:分析下列表達(dá)式:p-nump-nump-num+p-num+p-num+p-num設(shè)有以下語(yǔ)句:設(shè)有以下語(yǔ)句:struct stint n;struct st *next;static

23、struct st a3=5,&a1,7,&a2,9,0,*p;p=&a0;則表達(dá)式則表達(dá)式( )的值是的值是6。a.p+-n b.p-n+ c.(*p).n+ d.+p-n d指向結(jié)構(gòu)體數(shù)組的指針指向結(jié)構(gòu)體數(shù)組的指針struct student int num ; char name20; char sex; int age; ;struct student stu3101,lilin,m,18, 102,zhanghua,m,18, 103,wuli,f,19, ; struct student *p=stu;main()for( ; pnum,p-name,p-s

24、ex);說(shuō)明:說(shuō)明:如果指針變量如果指針變量p p指向結(jié)構(gòu)體數(shù)組,指向結(jié)構(gòu)體數(shù)組,則則p+1p+1指向結(jié)構(gòu)體數(shù)組的下一個(gè)指向結(jié)構(gòu)體數(shù)組的下一個(gè)元素,而不是當(dāng)前元素的下一個(gè)元素,而不是當(dāng)前元素的下一個(gè)成員。成員。如果指針變量如果指針變量p p指向一個(gè)結(jié)構(gòu)變指向一個(gè)結(jié)構(gòu)變量(或結(jié)構(gòu)數(shù)組),就不能再使量(或結(jié)構(gòu)數(shù)組),就不能再使之指向結(jié)構(gòu)體變量(或結(jié)構(gòu)數(shù)組之指向結(jié)構(gòu)體變量(或結(jié)構(gòu)數(shù)組元素)的某一成員元素)的某一成員。 p=stu; p=; (+p)-num(p+)-num numnamesexagestu0pstu1stu2p+1下面程序的輸出結(jié)果為( )。struct st int

25、 x; int *y; *p;int dt4=10,20,30,40;struct st aa4=50,&dt0,60,&dt1,70,&dt2,80,&dt3;main() p=aa;printf(%dn,+p-x);printf(%dn,(+p)-x);printf(%dn,+(*p-y);a.10 b.50 c. 51 d.60 20 60 60 70 20 21 21 31 10203040dt50607080aaxy&dt0&dt1&dt2&dat3pp+用結(jié)構(gòu)體變量和指向結(jié)構(gòu)體的指針作函數(shù)參數(shù)用結(jié)構(gòu)體變量和指向結(jié)構(gòu)體的

26、指針作函數(shù)參數(shù)用結(jié)構(gòu)體類型數(shù)據(jù)作為函數(shù)參數(shù)有以下三種形式:用結(jié)構(gòu)體類型數(shù)據(jù)作為函數(shù)參數(shù)有以下三種形式:q用結(jié)構(gòu)體變量的用結(jié)構(gòu)體變量的成員成員作參數(shù)作參數(shù)用法與普通變量作參數(shù)相同,值傳遞用法與普通變量作參數(shù)相同,值傳遞q用用結(jié)構(gòu)體變量結(jié)構(gòu)體變量作參數(shù)作參數(shù)函數(shù)的實(shí)參和形參必須都是結(jié)構(gòu)體變量,程序效率函數(shù)的實(shí)參和形參必須都是結(jié)構(gòu)體變量,程序效率低,不主張用低,不主張用q用指向結(jié)構(gòu)體變量的指針作參數(shù)用指向結(jié)構(gòu)體變量的指針作參數(shù) 提高運(yùn)行效率提高運(yùn)行效率10.4 用指針處理鏈表用指針處理鏈表一、一、鏈表結(jié)構(gòu)鏈表結(jié)構(gòu)鏈表的三要素:鏈表的三要素:v頭指針變量頭指針變量head指向鏈表的首結(jié)點(diǎn)指向鏈表的首結(jié)

27、點(diǎn)(鏈表中每一個(gè)元素稱為一個(gè)鏈表中每一個(gè)元素稱為一個(gè)結(jié)點(diǎn)結(jié)點(diǎn))v每個(gè)結(jié)點(diǎn)由每個(gè)結(jié)點(diǎn)由2個(gè)個(gè)域域組成:組成:數(shù)據(jù)域數(shù)據(jù)域-存儲(chǔ)結(jié)點(diǎn)本身的信息存儲(chǔ)結(jié)點(diǎn)本身的信息指針域指針域-存儲(chǔ)后繼結(jié)點(diǎn)的指針(地址)存儲(chǔ)后繼結(jié)點(diǎn)的指針(地址)v尾結(jié)點(diǎn)的指針域?yàn)槲步Y(jié)點(diǎn)的指針域?yàn)閚ull(空),(空),作為鏈表結(jié)束的標(biāo)志作為鏈表結(jié)束的標(biāo)志head1249a1356b1475c1021dnull124913561475102110.5 共用體共用體v概念:概念: 使幾個(gè)使幾個(gè)不同不同的變量占有的變量占有同一段同一段內(nèi)存空間的結(jié)構(gòu)稱為共用體內(nèi)存空間的結(jié)構(gòu)稱為共用體v共用體共用體類型類型的定義的定義 -與結(jié)構(gòu)體類型的定義類

28、似與結(jié)構(gòu)體類型的定義類似unionunion 共用共用體類型名體類型名 類型標(biāo)識(shí)符類型標(biāo)識(shí)符 成員名成員名1 1; 類型標(biāo)識(shí)符類型標(biāo)識(shí)符 成員名成員名2 2; ;union category int class; char position10;v共用體共用體變量變量的定義的定義-與結(jié)構(gòu)體變量的定義類似與結(jié)構(gòu)體變量的定義類似&間接定義法間接定義法:先先定義共用體定義共用體類型類型,后后定義共用體定義共用體變量變量union data int i; char ch; float f; ; union data un1,un2,un3;&直接定義法直接定義法:在定義共用體類型的同時(shí)

29、,在定義共用體類型的同時(shí),定義共用體變量定義共用體變量union data int i; char ch; float f; un1,un2,un3;union data int i; char ch; float f; ; union data un1,un2,un3;ch注意注意:共用變量占用的內(nèi)存空間,等于:共用變量占用的內(nèi)存空間,等于最長(zhǎng)最長(zhǎng)成員的長(zhǎng)度,而不是各成員長(zhǎng)度之和。成員的長(zhǎng)度,而不是各成員長(zhǎng)度之和。 if2000 2001 2002 2003un1:un1占用的內(nèi)存空間為字節(jié)(不是占用的內(nèi)存空間為字節(jié)(不是2+1+4=7字節(jié))。字節(jié))。v共用體共用體變量變量的引用的引用 與結(jié)

30、構(gòu)體變量的引用一樣,也只能與結(jié)構(gòu)體變量的引用一樣,也只能逐個(gè)逐個(gè)引用共用體變量的成員引用共用體變量的成員 un11; ma;un1.i=1;mun1.i;v特點(diǎn)特點(diǎn)(1 1)系統(tǒng)采用覆蓋技術(shù),實(shí)現(xiàn)共用變量各成員的內(nèi)存共享,所以在某一時(shí))系統(tǒng)采用覆蓋技術(shù),實(shí)現(xiàn)共用變量各成員的內(nèi)存共享,所以在某一時(shí)刻,最后一次存入的成員值是起作用的???,最后一次存入的成員值是起作用的。例如,執(zhí)行例如,執(zhí)行un1.i=1; un1.ch=c; un1.f=3.14un1.i=1; un1.ch=c; un1.f=3.14后,后,un1.fun1.f才是有效的成員才是有效的成員。(2 2)由于所有成員共享同一內(nèi)存空間

31、,故共用變量與其各成員的)由于所有成員共享同一內(nèi)存空間,故共用變量與其各成員的地址地址相同。相同。例如,例如,un1=un1=un1.i=un1.i=un1.ch=un1.ch=un1.fun1.f。(3 3)不能對(duì)共用體變量進(jìn)行初始化(不能對(duì)共用體變量進(jìn)行初始化(注意:結(jié)構(gòu)體變量可以);也不能將注意:結(jié)構(gòu)體變量可以);也不能將共用變量作為函數(shù)參數(shù),以及使函數(shù)返回一個(gè)共用體數(shù)據(jù),但可以使用指向共用變量作為函數(shù)參數(shù),以及使函數(shù)返回一個(gè)共用體數(shù)據(jù),但可以使用指向共用變量的指針。共用變量的指針。(4 4)共用類型可以出現(xiàn)在結(jié)構(gòu)類型定義中,反之亦然。)共用類型可以出現(xiàn)在結(jié)構(gòu)類型定義中,反之亦然。結(jié)構(gòu)體

32、與共用體l區(qū)別: 存儲(chǔ)方式不同struct node char ch2; int k;a;union node char ch2; int k;b;achkbch k變量的各成員同時(shí)存在任一時(shí)刻只有一個(gè)成員存在l聯(lián)系聯(lián)系: 兩者可相互嵌套兩者可相互嵌套下面定義中sizeof(a)和sizeof(a.share)的值是?struct date int day; int month; int year; union int share1; float share2; share; a; 例sizeof(a)=10sizeof(a.share)=4 下面定義中變量w在內(nèi)存中所占字節(jié)數(shù)?union a

33、a float x,y; char c6;struct st union aa v; float w5; double ave; w; 例 sizeof(w)=34 下列程序輸出結(jié)果是( )。#include main()unionint k; char i2; *s,a; s=&a; s-i0=0 x39; s-i1=0 x38; printf(%xn,s-k); a.3839 b.3938 c.380039 d.390038例a.ka.i0a.i1共用體變量a或s-k或s-i0或s-i1在內(nèi)存中存儲(chǔ)形式為0011 1001 下列程序輸出結(jié)果是( )。#include main()u

34、nionint k; char i2; *s,a; s=&a; s-i0=0 x39; s-i1=0 x38; printf(%xn,s-k); a.3839 b.3938 c.380039 d.390038例共用體變量as-ks-i0s-i10011 10010011 1000在內(nèi)存中存儲(chǔ)形式為 下列程序輸出結(jié)果是( )。#include main()unionint k; char i2; *s,a; s=&a; s-i0=0 x39; s-i1=0 x38; printf(%xn,s-k); a.3839 b.3938 c.380039 d.390038例共用體變量a00

35、11 10010011 1000低字節(jié)高字節(jié)故s-k在內(nèi)存中存儲(chǔ)數(shù)據(jù)為:0011 1000 0011 1001s-ks-i0s-i1若有以下的說(shuō)明、定義和語(yǔ)句,則輸出結(jié)果為_。main() union un int a; char c2; w; w.c0=a;w.c1=a; printf(%on,w.a);例w.aw.c0w.c1共用體變量w0100 0001若有以下的說(shuō)明、定義和語(yǔ)句,則輸出結(jié)果為_。main() union un int a; char c2; w; w.c0=a;w.c1=a; printf(%on,w.a);例w.aw.c0w.c1共用體變量w0100 00010110

36、 0001若有以下的說(shuō)明、定義和語(yǔ)句,則輸出結(jié)果為_。main() union un int a; char c2; w; w.c0=a;w.c1=a; printf(%on,w.a);例w.aw.c0w.c1共用體變量w0100 00010110 0001故w.a在內(nèi)存中存儲(chǔ)數(shù)據(jù)為:0110 0001 0100 0001若有以下的說(shuō)明、定義和語(yǔ)句,則輸出結(jié)果為_。main() union un int a; char c2; w; w.c0=a;w.c1=a; printf(%on,w.a);例w.aw.c0w.c1共用體變量w0100 00010110 0001故w.a在內(nèi)存中存儲(chǔ)數(shù)據(jù)為:

37、0110 0001 0100 0001以八進(jìn)制形式輸出,二進(jìn)制向以八進(jìn)制形式輸出,二進(jìn)制向八進(jìn)制八進(jìn)制轉(zhuǎn)換原則轉(zhuǎn)換原則是:三位二進(jìn)是:三位二進(jìn)制對(duì)應(yīng)一位八進(jìn)制制對(duì)應(yīng)一位八進(jìn)制1若有以下的說(shuō)明、定義和語(yǔ)句,則輸出結(jié)果為_。main() union un int a; char c2; w; w.c0=a;w.c1=a; printf(%on,w.a);例w.aw.c0w.c1共用體變量w0100 00010110 0001故w.a在內(nèi)存中存儲(chǔ)數(shù)據(jù)為:0110 0001 0100 0001以八進(jìn)制形式輸出,二進(jìn)制以八進(jìn)制形式輸出,二進(jìn)制向八進(jìn)制向八進(jìn)制轉(zhuǎn)換原則轉(zhuǎn)換原則是:三位是:三位二進(jìn)制對(duì)應(yīng)一位

38、八進(jìn)制二進(jìn)制對(duì)應(yīng)一位八進(jìn)制10若有以下的說(shuō)明、定義和語(yǔ)句,則輸出結(jié)果為_。main() union un int a; char c2; w; w.c0=a;w.c1=a; printf(%on,w.a);例w.aw.c0w.c1共用體變量w0100 00010110 0001故w.a在內(nèi)存中存儲(chǔ)數(shù)據(jù)為:0110 0001 0100 0001以八進(jìn)制形式輸出,二進(jìn)制向以八進(jìn)制形式輸出,二進(jìn)制向八進(jìn)制八進(jìn)制轉(zhuǎn)換原則轉(zhuǎn)換原則是:三位二進(jìn)是:三位二進(jìn)制對(duì)應(yīng)一位八進(jìn)制制對(duì)應(yīng)一位八進(jìn)制105若有以下的說(shuō)明、定義和語(yǔ)句,則輸出結(jié)果為_。main() union un int a; char c2; w;

39、w.c0=a;w.c1=a; printf(%on,w.a);例w.aw.c0w.c1共用體變量w0100 00010110 0001故w.a在內(nèi)存中存儲(chǔ)數(shù)據(jù)為:0110 0001 0100 0001以八進(jìn)制形式輸出,二進(jìn)制向以八進(jìn)制形式輸出,二進(jìn)制向八進(jìn)制八進(jìn)制轉(zhuǎn)換原則轉(zhuǎn)換原則是:三位二進(jìn)是:三位二進(jìn)制對(duì)應(yīng)一位八進(jìn)制制對(duì)應(yīng)一位八進(jìn)制1050若有以下的說(shuō)明、定義和語(yǔ)句,則輸出結(jié)果為_。main() union un int a; char c2; w; w.c0=a;w.c1=a; printf(%on,w.a);例w.aw.c0w.c1共用體變量w0100 00010110 0001故w.a

40、在內(nèi)存中存儲(chǔ)數(shù)據(jù)為:0110 0001 0100 0001以八進(jìn)制形式輸出,二進(jìn)制向以八進(jìn)制形式輸出,二進(jìn)制向八進(jìn)制八進(jìn)制轉(zhuǎn)換原則轉(zhuǎn)換原則是:三位二進(jìn)是:三位二進(jìn)制對(duì)應(yīng)一位八進(jìn)制制對(duì)應(yīng)一位八進(jìn)制10506運(yùn)行結(jié)果: 60501 以下程序運(yùn)行的輸出結(jié)果是以下程序運(yùn)行的輸出結(jié)果是( )。main()union char i2; int k; r; r.i0=2;r.i1=0; printf(%dn,r.k);a.2 b.1 c.0 d.不確定不確定a例e.ine.a 或e.b共用體變量ee.in.xe.in.y程序運(yùn)行的結(jié)果是程序運(yùn)行的結(jié)果是_。main() union example struc

41、t int x; int y; in; int a; int b; e; e.a=1; e.b=2; e.in.x=e.a*e.b; e.in.y=e.a+e.b;printf(%d,%dn,e.in.x,e.in.y);程序運(yùn)行的結(jié)果是程序運(yùn)行的結(jié)果是_。main() union example struct int x; int y; in; int a; int b; e; e.a=1; e.b=2; e.in.x=e.a*e.b; e.in.y=e.a+e.b;printf(%d,%dn,e.in.x,e.in.y);e.ine.a或e.b共用體變量e1e.in.xe.in.y例程序運(yùn)

42、行的結(jié)果是程序運(yùn)行的結(jié)果是_。main() union example struct int x; int y; in; int a; int b; e; e.a=1; e.b=2; e.in.x=e.a*e.b; e.in.y=e.a+e.b;printf(%d,%dn,e.in.x,e.in.y);e.ine.a或e.b共用體變量e1e.in.xe.in.y2例程序運(yùn)行的結(jié)果是程序運(yùn)行的結(jié)果是_。main() union example struct int x; int y; in; int a; int b; e; e.a=1; e.b=2; e.in.x=e.a*e.b; e.in.

43、y=e.a+e.b;printf(%d,%dn,e.in.x,e.in.y);e.ine.a或e.b共用體變量e2e.in.xe.in.y4例10.6 枚舉類型枚舉類型v用途:用途: 如果一個(gè)變量只有幾種可能的值,就可以定義成枚舉類型如果一個(gè)變量只有幾種可能的值,就可以定義成枚舉類型v枚舉枚舉類型類型的定義的定義 enum 枚舉類型名取值表枚舉類型名取值表; 例:例:enum weekdays sun,mon,tue,wed,thu,fri,sat;v枚舉枚舉變量變量的定義的定義-與結(jié)構(gòu)體變量定義類似與結(jié)構(gòu)體變量定義類似 間接定義:間接定義:enum weekdays work; 直接定義:直

44、接定義:enum weekdays sun,mon,tue,wed,thu,fri,sat work; v說(shuō)明:說(shuō)明:(1)枚舉型僅適應(yīng)于取值有限的數(shù)據(jù)。枚舉型僅適應(yīng)于取值有限的數(shù)據(jù)。 例:例:1周天,年個(gè)月。周天,年個(gè)月。(2)取值表中的值稱為枚舉元素,其含義由程序解釋。取值表中的值稱為枚舉元素,其含義由程序解釋。 例:不是因?yàn)閷懗衫翰皇且驗(yàn)閷懗伞皊un”就自動(dòng)代表就自動(dòng)代表“星期天星期天”。事實(shí)上,。事實(shí)上, 枚舉枚舉元素用什么表示都可以。元素用什么表示都可以。(3)枚舉元素按常量處理,它們的值是定義時(shí)的順序號(hào)(從開始),枚舉元素按常量處理,它們的值是定義時(shí)的順序號(hào)(從開始),所以枚舉元

45、素可以進(jìn)行比較,比較規(guī)則是:序號(hào)大者為大!所以枚舉元素可以進(jìn)行比較,比較規(guī)則是:序號(hào)大者為大! 例:上例中的例:上例中的sun的值為的值為0、mon的值為的值為1、sat的值為的值為6,所,所以以monsun,sat最大。最大。(4)枚舉元素的值也是可以人為改變的:在定義時(shí)由程序指定。枚舉元素的值也是可以人為改變的:在定義時(shí)由程序指定。 例:如果例:如果enum weekdays sun=, mon ,tue, wed, thu, fri, sat;則;則sun=,mon=,從,從tue=2開始,依次增。開始,依次增。 注意注意:不同的枚舉元素不可以指定相同的值:不同的枚舉元素不可以指定相同的

46、值(5)一個(gè)整數(shù)不能直接賦值給枚舉變量一個(gè)整數(shù)不能直接賦值給枚舉變量 例:例:workday2;(非法,因?yàn)轭愋筒煌?;(非法,因?yàn)轭愋筒煌?改寫成:改寫成:workday(enum weekday)2;下面程序的輸出是下面程序的輸出是( )。main() enum teammy,your=4,his,her=his+10;printf(%d %d %d %dn,my,your,his,her);a.0 1 2 3 b.0 4 0 10 c.0 4 5 15 d.1 4 5 15 c下面程序的輸出是下面程序的輸出是 。main() enum emem1=3,em2=1,em3;char *a

47、a=aa,bb,cc,dd;printf(%s%s%sn,aaem1,aaem2,aaem3);ddbbcc10.10 用用typedef定義類型定義類型 v 作用:作用:用用typedeftypedef定義已有類型的別名。該別名與標(biāo)準(zhǔn)定義已有類型的別名。該別名與標(biāo)準(zhǔn)類型名一樣,可用來(lái)定義相應(yīng)的變量。類型名一樣,可用來(lái)定義相應(yīng)的變量。v 定義已有類型別名的方法定義已有類型別名的方法 (1)(1)按定義變量的方法,寫出定義體;按定義變量的方法,寫出定義體;(2)(2)將變量名換成別名;將變量名換成別名;(3)(3)在定義體最前面加上在定義體最前面加上typedeftypedef。 關(guān)鍵字關(guān)鍵字例例: :給實(shí)型給實(shí)型floatfloat定義定義1 1個(gè)別名個(gè)別名realreal。(1)(1)按定義實(shí)型變量的方法,寫出定義按定義實(shí)型變量的方法,寫出定義體:體: float f;float f;(2)(2)將變量名換成別名:將變量名換成別名: float fl

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論