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

下載本文檔

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

文檔簡介

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

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

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

4、;char sex;定義結(jié)構(gòu)float score;C 語言中的有效數(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)定義僅描述了一個結(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; float

5、 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é)號、姓名、性別、成績、號、姓名、性別、成績、地址和生日共地址和生日共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 age;

6、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; char addr30

7、; 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)體變量不能整體輸入輸出,要通過成員運(yùn)算結(jié)構(gòu)體變量不能整體輸入輸出,要通過成員運(yùn)算符符“. .”,逐個逐個訪問其成員,且訪問的格式為:訪問其成員,且訪問的格式為: 結(jié)構(gòu)體變量結(jié)構(gòu)體變量. .成員成員 struct date int year; int month; int day; ;struct date

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

9、成員最低級子成員引用結(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; student;

10、 struct date int year; int month; int day; ;num name sex score birthdaystudent:對最低一級成員,可像同類型的普通變量一樣,進(jìn)行對最低一級成員,可像同類型的普通變量一樣,進(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說明說明 若某成員本身又是結(jié)構(gòu)體類型,則該成員的初值為一個初值表若某成員本身又是結(jié)構(gòu)體類型,則該成員的初值為一個初值表 初值的數(shù)據(jù)類型,應(yīng)與結(jié)構(gòu)變量中相應(yīng)成員的類型一致初值的數(shù)據(jù)類型,應(yīng)與結(jié)構(gòu)變量

11、中相應(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 Ming ,M

12、,90.5; 1Yao MingM賦值的順序應(yīng)與成員聲明時(shí)的順序一樣;允許初始化語句中的值的數(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(請輸入成績:請輸入成績:n);scanf(%f,&student2.score);結(jié)構(gòu)變量賦值結(jié)構(gòu)變量賦值1Zhang Zi Liang Mq 用輸入語句或賦值語句來給結(jié)構(gòu)變量的各個成員賦值7878s

13、tudent3 = student2; student31Zhang Zi Liang M78問題描述:根據(jù)學(xué)員的成績,輸出不及格學(xué)員的詳細(xì)信息。 使用結(jié)構(gòu)示例使用結(jié)構(gòu)示例#includestruct studentint num;/學(xué)號char *name;/姓名char sex;/性別float score;/成績;void main() static struct student stu1=1,李亞鵬,M,61; static struct student stu2=2,周晶晶,F,92.5; static struct student stu3=3,姚光明,M,59; printf(不

14、及格學(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李亞鵬M78stu22周晶晶F92stu33姚光明M

15、59struct 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.month, stu.birthday.da

16、y); 例例 定義一個結(jié)構(gòu)變量定義一個結(jié)構(gòu)變量stustu,用于存儲和顯示一個學(xué)生的基本用于存儲和顯示一個學(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ù)組的每一個元素,都是結(jié)構(gòu)類型數(shù)據(jù),結(jié)構(gòu)數(shù)組的每一個元素,都是結(jié)構(gòu)類型數(shù)據(jù),均包含結(jié)構(gòu)類型的所有成員。均包含結(jié)構(gòu)類型的所有成員。struct student int num

17、; 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; int age; float score; ;struct stud

18、ent stu3101,Lilin,M,18,87.5, 102,Zhanghua,M,18,99,103,Wuli,F,19,78.5 ; 例例 定義結(jié)構(gòu)類型定義結(jié)構(gòu)類型structstruct std_infostd_info,定義一個結(jié)構(gòu)數(shù)組定義一個結(jié)構(gòu)數(shù)組stustu,用于存儲和顯示三個學(xué)生的基本情況。用于存儲和顯示三個學(xué)生的基本情況。struct date int year; int month; int day; ;struct std_info int num ; char name20; char sex; struct date birthday; stu3=102,Zhan

19、gsan,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.birthday.day); 程序運(yùn)行結(jié)果:程序運(yùn)行結(jié)果:No. Name Sex

20、 BirthdayNo. Name Sex Birthday102 102 ZhangsanZhangsan M M 1980-9-20 1980-9-20105 105 LisiLisi M 1980-8-15 M 1980-8-15112 112 WangwuWangwu F F 1980-3-10 1980-3-10 統(tǒng)計(jì)后選人選票統(tǒng)計(jì)后選人選票struct person char name20; int count;leader3=“Lian”,0,“ABian”,0,”Song“,0; main() int i,j; char leader_name20; for(i=1;i=10;

21、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 *p=&stu;則則結(jié)構(gòu)體成員運(yùn)算符結(jié)構(gòu)體成員運(yùn)算符 . . 和和 - 的比較

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

23、達(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-sex);說明:說明:如果指針變量如果指針變量p p指向結(jié)構(gòu)體數(shù)組,指向結(jié)構(gòu)體數(shù)組,則則p+1p+1指向結(jié)構(gòu)體數(shù)組

24、的下一個指向結(jié)構(gòu)體數(shù)組的下一個元素,而不是當(dāng)前元素的下一個元素,而不是當(dāng)前元素的下一個成員。成員。如果指針變量如果指針變量p p指向一個結(jié)構(gòu)變指向一個結(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 x; int *y; *p;int dt4=10,20,30,40;struct st aa4=50,&dt0

25、,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)體的指針作函數(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ù)相同

26、,值傳遞用法與普通變量作參數(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é)點(diǎn)(鏈表中每一個元素稱為一個鏈表中每一個元素稱為一個結(jié)點(diǎn)結(jié)點(diǎn))v每個結(jié)點(diǎn)由每個結(jié)點(diǎn)由2個個域域組成:組成:數(shù)據(jù)域數(shù)據(jù)域-存儲結(jié)點(diǎn)本身的信息存儲結(jié)點(diǎn)本身的信息指針域指針域-存儲后

27、繼結(jié)點(diǎn)的指針(地址)存儲后繼結(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概念:概念: 使幾個使幾個不同不同的變量占有的變量占有同一段同一段內(nèi)存空間的結(jié)構(gòu)稱為共用體內(nèi)存空間的結(jié)構(gòu)稱為共用體v共用體共用體類型類型的定義的定義 -與結(jié)構(gòu)體類型的定義類似與結(jié)構(gòu)體類型的定義類似unionunion 共用共用體類型名體類型名 類型標(biāo)識符類型標(biāo)識符 成員名成員名1 1; 類型標(biāo)識符類型標(biāo)識符 成員名成員名2 2; ;union ca

28、tegory 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í),在定義共用體類型的同時(shí),定義共用體變量定義共用體變量union data int i; char ch; float f; un1,un2,un3;union data int i; char

29、 ch; float f; ; union data un1,un2,un3;ch注意注意:共用變量占用的內(nèi)存空間,等于:共用變量占用的內(nèi)存空間,等于最長最長成員的長度,而不是各成員長度之和。成員的長度,而不是各成員長度之和。 if2000 2001 2002 2003un1:un1占用的內(nèi)存空間為字節(jié)(不是占用的內(nèi)存空間為字節(jié)(不是2+1+4=7字節(jié))。字節(jié))。v共用體共用體變量變量的引用的引用 與結(jié)構(gòu)體變量的引用一樣,也只能與結(jié)構(gòu)體變量的引用一樣,也只能逐個逐個引用共用體變量的成員引用共用體變量的成員 un11; ma;un1.i=1;mun1.i;v特點(diǎn)特點(diǎn)(1 1)系統(tǒng)采用覆蓋技術(shù),實(shí)

30、現(xiàn)共用變量各成員的內(nèi)存共享,所以在某一時(shí))系統(tǒng)采用覆蓋技術(shù),實(shí)現(xiàn)共用變量各成員的內(nèi)存共享,所以在某一時(shí)刻,最后一次存入的成員值是起作用的??蹋詈笠淮未嫒氲某蓡T值是起作用的。例如,執(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)存空間,故共用變量與其各成員的)由于所有成員共享同一內(nèi)存空間,故共用變量與其各成員的地址地址相同。相同。例如,例如,un1=un1=un1.i=un1.i=un1.ch=un1.ch=un1.fun1

31、.f。(3 3)不能對共用體變量進(jìn)行初始化(不能對共用體變量進(jìn)行初始化(注意:結(jié)構(gòu)體變量可以);也不能將注意:結(jié)構(gòu)體變量可以);也不能將共用變量作為函數(shù)參數(shù),以及使函數(shù)返回一個共用體數(shù)據(jù),但可以使用指向共用變量作為函數(shù)參數(shù),以及使函數(shù)返回一個共用體數(shù)據(jù),但可以使用指向共用變量的指針。共用變量的指針。(4 4)共用類型可以出現(xiàn)在結(jié)構(gòu)類型定義中,反之亦然。)共用類型可以出現(xiàn)在結(jié)構(gòu)類型定義中,反之亦然。結(jié)構(gòu)體與共用體l區(qū)別: 存儲方式不同struct node char ch2; int k;a;union node char ch2; int k;b;achkbch k變量的各成員同時(shí)存在任一時(shí)刻

32、只有一個成員存在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 aa float x,y; char c6;struct st union aa v; float w5; double ave; w; 例 sizeof(w)=34 下列程序輸出結(jié)果是( )。#

33、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)存中存儲形式為0011 1001 下列程序輸出結(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.390

34、038例共用體變量as-ks-i0s-i10011 10010011 1000在內(nèi)存中存儲形式為 下列程序輸出結(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例共用體變量a0011 10010011 1000低字節(jié)高字節(jié)故s-k在內(nèi)存中存儲數(shù)據(jù)為:0011 1000 0011 1001s-ks-i0s-i1若有以下的說明、定義和語句,則輸出結(jié)果為_。main() union un int a

35、; char c2; w; w.c0=A;w.c1=a; printf(%on,w.a);例w.aw.c0w.c1共用體變量w0100 0001若有以下的說明、定義和語句,則輸出結(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若有以下的說明、定義和語句,則輸出結(jié)果為_。main() union un int a; char c2; w; w.c0=A;w.c1=a; printf(%on,w.a);例w.aw.c0w.c1共用體變

36、量w0100 00010110 0001故w.a在內(nèi)存中存儲數(shù)據(jù)為:0110 0001 0100 0001若有以下的說明、定義和語句,則輸出結(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)存中存儲數(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)制對應(yīng)一位八進(jìn)制制對應(yīng)一位八進(jìn)制1若有以下的說明、定義和語句,則輸出結(jié)果為_

37、。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)存中存儲數(shù)據(jù)為:0110 0001 0100 0001以八進(jìn)制形式輸出,二進(jìn)制以八進(jìn)制形式輸出,二進(jìn)制向八進(jìn)制向八進(jìn)制轉(zhuǎn)換原則轉(zhuǎn)換原則是:三位是:三位二進(jìn)制對應(yīng)一位八進(jìn)制二進(jìn)制對應(yīng)一位八進(jìn)制10若有以下的說明、定義和語句,則輸出結(jié)果為_。main() union un int a; char c2; w; w.c0=A;w.c1=a; printf(%on,w.a);例w.aw.

38、c0w.c1共用體變量w0100 00010110 0001故w.a在內(nèi)存中存儲數(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)制對應(yīng)一位八進(jìn)制制對應(yīng)一位八進(jìn)制105若有以下的說明、定義和語句,則輸出結(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)存中存儲數(shù)據(jù)為:0110 0001 0100 0001以八進(jìn)制形式輸出,

39、二進(jìn)制向以八進(jìn)制形式輸出,二進(jìn)制向八進(jìn)制八進(jìn)制轉(zhuǎn)換原則轉(zhuǎn)換原則是:三位二進(jìn)是:三位二進(jìn)制對應(yīng)一位八進(jìn)制制對應(yīng)一位八進(jìn)制1050若有以下的說明、定義和語句,則輸出結(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)存中存儲數(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)制對應(yīng)一位八進(jìn)制制對應(yīng)一位八進(jìn)制10506運(yùn)行結(jié)果: 6

40、0501 以下程序運(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 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

41、);程序運(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)行的結(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

42、.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.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用途:用途: 如果一個變量只有幾種可能的值,就可

43、以定義成枚舉類型如果一個變量只有幾種可能的值,就可以定義成枚舉類型v枚舉枚舉類型類型的定義的定義 enum 枚舉類型名取值表枚舉類型名取值表; 例:例:enum weekdays Sun,Mon,Tue,Wed,Thu,Fri,Sat;v枚舉枚舉變量變量的定義的定義-與結(jié)構(gòu)體變量定義類似與結(jié)構(gòu)體變量定義類似 間接定義:間接定義:enum weekdays work; 直接定義:直接定義:enum weekdays Sun,Mon,Tue,Wed,Thu,Fri,Sat work; v說明:說明:(1)枚舉型僅適應(yīng)于取值有限的數(shù)據(jù)。枚舉型僅適應(yīng)于取值有限的數(shù)據(jù)。 例:例:1周天,年個月。周天,年

44、個月。(2)取值表中的值稱為枚舉元素,其含義由程序解釋。取值表中的值稱為枚舉元素,其含義由程序解釋。 例:不是因?yàn)閷懗衫翰皇且驗(yàn)閷懗伞癝un”就自動代表就自動代表“星期天星期天”。事實(shí)上,。事實(shí)上, 枚舉枚舉元素用什么表示都可以。元素用什么表示都可以。(3)枚舉元素按常量處理,它們的值是定義時(shí)的順序號(從開始),枚舉元素按常量處理,它們的值是定義時(shí)的順序號(從開始),所以枚舉元素可以進(jìn)行比較,比較規(guī)則是:序號大者為大!所以枚舉元素可以進(jìn)行比較,比較規(guī)則是:序號大者為大! 例:上例中的例:上例中的Sun的值為的值為0、Mon的值為的值為1、Sat的值為的值為6,所,所以以MonSun,Sat最

45、大。最大。(4)枚舉元素的值也是可以人為改變的:在定義時(shí)由程序指定。枚舉元素的值也是可以人為改變的:在定義時(shí)由程序指定。 例:如果例:如果enum weekdays Sun=, Mon ,Tue, Wed, Thu, Fri, Sat;則則Sun=,Mon=,從從Tue=2開始,依次增。開始,依次增。 注意注意:不同的枚舉元素不可以指定相同的值:不同的枚舉元素不可以指定相同的值(5)一個整數(shù)不能直接賦值給枚舉變量一個整數(shù)不能直接賦值給枚舉變量 例:例:workday2;(;(非法,因?yàn)轭愋筒煌┓欠ǎ驗(yàn)轭愋筒煌?改寫成:改寫成:workday(enum weekday)2;下面程序的輸出是

46、下面程序的輸出是( )。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 *aa=AA,BB,CC,DD;printf(%s%s%sn,aaem1,aaem2,aaem3);DDBBCC10.10 用用typedef定義類型定義類型 v 作用:作用:用用typedeftypedef定義已有類型的別名

47、。該別名與標(biāo)準(zhǔn)定義已有類型的別名。該別名與標(biāo)準(zhǔn)類型名一樣,可用來定義相應(yīng)的變量。類型名一樣,可用來定義相應(yīng)的變量。v 定義已有類型別名的方法定義已有類型別名的方法 (1)(1)按定義變量的方法,寫出定義體;按定義變量的方法,寫出定義體;(2)(2)將變量名換成別名;將變量名換成別名;(3)(3)在定義體最前面加上在定義體最前面加上typedeftypedef。 關(guān)鍵字關(guān)鍵字例例: :給實(shí)型給實(shí)型floatfloat定義定義1 1個別名個別名REALREAL。(1)(1)按定義實(shí)型變量的方法,寫出定義按定義實(shí)型變量的方法,寫出定義體:體: float f;float f;(2)(2)將變量名換成別名:將變量名換成別名: float floa

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論