版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、9.4 9.4 共共 用用 體體 1共用型概念共用型概念 使幾個(gè)不同的變量占用同一段內(nèi)存空間的結(jié)構(gòu)稱為共使幾個(gè)不同的變量占用同一段內(nèi)存空間的結(jié)構(gòu)稱為共用型。用型。 2共用類型的定義共用類型的定義與結(jié)構(gòu)類型的定義類似與結(jié)構(gòu)類型的定義類似 union 共用類型名共用類型名 成員列表成員列表 ; 3共用變量的定義共用變量的定義與結(jié)構(gòu)變量的定義類似與結(jié)構(gòu)變量的定義類似 直接定義形式如下:直接定義形式如下: 間接定義形式如下:間接定義形式如下: union union 共用體名共用體名 union union 共用體名共用體名 分量表分量表 分量表分量表 ; 變量表變量表 ; union ; union
2、 共用體名共用體名 變量表變量表; ;共用變量的引用共用變量的引用與結(jié)構(gòu)變量一樣只能逐個(gè)引用共用變量的成員與結(jié)構(gòu)變量一樣只能逐個(gè)引用共用變量的成員 printf( “%d”, a); 錯(cuò)誤錯(cuò)誤 scanf( “%d”,&a); 錯(cuò)誤錯(cuò)誤訪問(wèn)變量訪問(wèn)變量 a 各成員的格式為:各成員的格式為:a. i、a.ch、a.f scanf( “d”,&a.i); printf( “%dn”,a.i);5.共用體與結(jié)構(gòu)體相似之處共用體與結(jié)構(gòu)體相似之處(1 1)都是由不同類型的數(shù)據(jù)項(xiàng)組成一個(gè)都是由不同類型的數(shù)據(jù)項(xiàng)組成一個(gè)(2 2)都只能對(duì)分量進(jìn)行操作和引用。都只能對(duì)分量進(jìn)行操作和引用。例例 1
3、: 對(duì)共用體變量的使用對(duì)共用體變量的使用struct int num; 編號(hào)編號(hào) char name10; 姓名姓名 char sex; 性別性別 char job; 類別:類別:s 學(xué)生學(xué)生 t 教師教師 union int ciass; 班號(hào)班號(hào) char position10; 職務(wù)職務(wù) category; per 2;構(gòu)造類型構(gòu)造類型( (數(shù)組、數(shù)組、結(jié)構(gòu)體、共用體結(jié)構(gòu)體、共用體) )的定義可以嵌套的定義可以嵌套 main() int n, i; for ( i=0;i2;i+) scanf(“%d%s%c%c”,&peri.num, , &peri.
4、sex,&peri.job); if ( peri.job= =s) scanf( “%d”,&peri.category.class); else if ( peri.job= =t) scanf( “%s”,peri.category.position); else printf( “input error!”); prints( “n”);6共用變量特點(diǎn)共用變量特點(diǎn)(1)系統(tǒng)采用覆蓋技術(shù),實(shí)現(xiàn)共用變量各成員的內(nèi)系統(tǒng)采用覆蓋技術(shù),實(shí)現(xiàn)共用變量各成員的內(nèi)存共享,所以在某一時(shí)刻,存放的和起作用的是最后一次存共享,所以在某一時(shí)刻,存放的和起作用的是最后一次存入的成員值。存入的成員
5、值。(2)由于所有成員共享同一內(nèi)存空間,故共用變量由于所有成員共享同一內(nèi)存空間,故共用變量與其各成員的地址相同。與其各成員的地址相同。 (3)不能對(duì)共用變量進(jìn)行初始化(注意:結(jié)構(gòu)變量不能對(duì)共用變量進(jìn)行初始化(注意:結(jié)構(gòu)變量可以);也不能將共用變量作為函數(shù)參數(shù),以及使函數(shù)返可以);也不能將共用變量作為函數(shù)參數(shù),以及使函數(shù)返回一個(gè)共用數(shù)據(jù),但可以使用指向共用變量的指針?;匾粋€(gè)共用數(shù)據(jù),但可以使用指向共用變量的指針。(4)共用類型可以出現(xiàn)在結(jié)構(gòu)類型定義中,反之亦共用類型可以出現(xiàn)在結(jié)構(gòu)類型定義中,反之亦然。然。 struct memb float v;int n;char c; sa1; sa1占占7
6、個(gè)字個(gè)字 節(jié)內(nèi)存空間節(jié)內(nèi)存空間union memb float v;int n;char c; usa2; usa2占占4個(gè)字個(gè)字節(jié)節(jié)內(nèi)存空間內(nèi)存空間 100110051007vnc2001vnc200220032004 共用變量占用的內(nèi)存空間,等于最長(zhǎng)成員的長(zhǎng)度,而共用變量占用的內(nèi)存空間,等于最長(zhǎng)成員的長(zhǎng)度,而不是各成員長(zhǎng)度之和。不是各成員長(zhǎng)度之和。 7、共用體與結(jié)構(gòu)體的主要區(qū)別共用體與結(jié)構(gòu)體的主要區(qū)別 (1 1)結(jié)構(gòu)體變量結(jié)構(gòu)體變量 占用空間是各成員所占空間之總和占用空間是各成員所占空間之總和; ; 共用體變量共用體變量 占存儲(chǔ)空間是各成員中所占空間最大者。占存儲(chǔ)空間是各成員中所占空間最大
7、者。 (2 2)結(jié)構(gòu)體變量結(jié)構(gòu)體變量 各成員占用內(nèi)存中一片連續(xù)的存儲(chǔ)區(qū),各成員占用內(nèi)存中一片連續(xù)的存儲(chǔ)區(qū),各成員的地址互不相同;各成員的地址互不相同;共用體變量共用體變量各成員在內(nèi)存中所占各成員在內(nèi)存中所占空間的起始地址相同。空間的起始地址相同。 (3 3)結(jié)構(gòu)體變量結(jié)構(gòu)體變量的各個(gè)分量在任何時(shí)刻都同時(shí)存在,的各個(gè)分量在任何時(shí)刻都同時(shí)存在,且可同時(shí)引用。且可同時(shí)引用。共用體變量共用體變量的各個(gè)分量在同一時(shí)刻只存在的各個(gè)分量在同一時(shí)刻只存在其中一個(gè),也只能引用其中的一個(gè)其中一個(gè),也只能引用其中的一個(gè)。 (4 4)結(jié)構(gòu)體變量結(jié)構(gòu)體變量可以初始化可以初始化,共用體變量共用體變量不能初始化。不能初始化
8、。例例2: 共用體的內(nèi)存使用。共用體的內(nèi)存使用。#include void main() union int i; char string2; a; a.i=24897;printf(“i=%d,string1=%c”,a.i,a.string0); printf(“string2=%cn”, a.string1);string0=0; string1=0;printf(“i=%d,string1=%c”,a.i,a.string0); printf(“string2=%cn”, a.string1);程序運(yùn)行結(jié)果程序運(yùn)行結(jié)果: i=24897,string1=A,string2=ai=822
9、4,string1=0,string2=0例例3: 將共用體變量作為函數(shù)的參數(shù)。將共用體變量作為函數(shù)的參數(shù)。#include union testint i;char string2; a;void show(union test a) printf(“i=%d,string1=%c”,a.i,a.string0); printf(“string2=%cn”, a.string1); return; void main() a.i=24897; show(a);string0=0; string1=0;show(a); return;程序運(yùn)行結(jié)果:程序運(yùn)行結(jié)果:I=24897,string1=
10、A,string2=aI=8224,string1=0,string2=01定義格式:定義格式: enum 枚舉類型名枚舉類型名 取值表取值表;例如,例如, enum weekdays Sun,Mon,Tue,Wed,Thu,Fri,Sat; 中的標(biāo)識(shí)符稱為枚舉常量。中的標(biāo)識(shí)符稱為枚舉常量。它只能為標(biāo)識(shí)符,不能為數(shù)字常量或字符常量它只能為標(biāo)識(shí)符,不能為數(shù)字常量或字符常量2枚舉變量的定義(與結(jié)構(gòu)體變量類似)枚舉變量的定義(與結(jié)構(gòu)體變量類似)(1)間接定義)間接定義例如,例如,enum weekdays w1,w2;(2)直接定義)直接定義例如,例如, enum weekdays Sun,Mon,
11、Tue,Wed,Thu,Fri,Sat w1,w2 ; 9.5 9.5 枚枚 舉舉 類類 型型3枚舉型使用說(shuō)明枚舉型使用說(shuō)明(1)枚舉型僅適應(yīng)于取值有限的數(shù)據(jù)。枚舉型僅適應(yīng)于取值有限的數(shù)據(jù)。 例如例如: 周天周天, 年個(gè)月。年個(gè)月。(2)取值表中的值為枚舉元素,其含義由程序解取值表中的值為枚舉元素,其含義由程序解釋。釋。 例如,不是寫(xiě)成例如,不是寫(xiě)成“Sun”就自動(dòng)代表就自動(dòng)代表“星期天星期天”。事實(shí)上,事實(shí)上, 枚舉元素用什么表示都可以。枚舉元素用什么表示都可以。(3)枚舉型變量枚舉型變量 w1 , w2 只能在定義的值表中取只能在定義的值表中取其中一個(gè)枚舉常量作為當(dāng)前值。其中一個(gè)枚舉常量作
12、為當(dāng)前值。(4)枚舉元素作為常量是有值的。枚舉元素作為常量是有值的。 定義時(shí)定義時(shí)順序號(hào),從開(kāi)始順序號(hào),從開(kāi)始,所以枚舉元素可以進(jìn)行,所以枚舉元素可以進(jìn)行比較,比較規(guī)則是:序號(hào)大者為大!比較,比較規(guī)則是:序號(hào)大者為大!例如,上例中的例如,上例中的Sun=0、Mon=1、Sat=6,所以所以 MonSun、 Sat 最大。最大。(5)枚舉元素的值也是可以改變的。枚舉元素的值也是可以改變的。在定義時(shí)由程序指定,例如在定義時(shí)由程序指定,例如:enum weekdays Sun=7, Mon1 ,Tue, Wed, Thu, Fri, Sat;則則Sun=7,Mon=1,從,從Tue=2開(kāi)始,依次增。
13、開(kāi)始,依次增。(6)一個(gè)整型數(shù)值不能直接賦值給一個(gè)枚舉變量。一個(gè)整型數(shù)值不能直接賦值給一個(gè)枚舉變量。 enum weekdays Sun= 7, Mon 1 ,Tue, Wed, Thu, Fri, Sat; enum weekdays wk1;不允許直接賦值整數(shù):不允許直接賦值整數(shù):wk1 = 7; /*數(shù)據(jù)類型不同數(shù)據(jù)類型不同*/只能寫(xiě)成:只能寫(xiě)成: wk1= Sun; 或:或: wk1=( enum weekdays )7;甚至可以是表達(dá)式,如:甚至可以是表達(dá)式,如: w2=(enum weekday)(5-3); 例例 4: 枚舉類型的用法枚舉類型的用法 #include enum m
14、onths JAN=1,FEB,MAR,APR,MAY, JUN,JUL,AUG,SEP,OCT,NOV,DEC ;main() enum months month; char *mname=,January,February, March,April,May,June,July, Auguest, September, October,November,Dcember; for(month=JAN;month=DEC;month+) printf(%2d - %-10sn,month, mnamemonth); 9.6 typedef 9.6 typedef 類型定義類型定義 除可直接使用提
15、供的標(biāo)準(zhǔn)類型和自定義的類型除可直接使用提供的標(biāo)準(zhǔn)類型和自定義的類型(結(jié)構(gòu)、共用、枚舉)外,也可使用(結(jié)構(gòu)、共用、枚舉)外,也可使用typedeftypedef定義已有類定義已有類型的別名。該別名與標(biāo)準(zhǔn)類型名一樣,可用來(lái)定義相應(yīng)型的別名。該別名與標(biāo)準(zhǔn)類型名一樣,可用來(lái)定義相應(yīng)的變量的變量。 ()()簡(jiǎn)單的名字替換簡(jiǎn)單的名字替換typedef char CHARACTER;經(jīng)過(guò)上面的定義后經(jīng)過(guò)上面的定義后CHARACTER就與數(shù)據(jù)類型就與數(shù)據(jù)類型char等等價(jià),同樣也可以用價(jià),同樣也可以用CHARACTER來(lái)定義字符型變量。例來(lái)定義字符型變量。例如:如:typedef char CHARACTER
16、;char a;CHARACTER b;變量變量a,b都是字符型。都是字符型。()()定義一個(gè)類型名代表一個(gè)結(jié)構(gòu)體類型。例如;定義一個(gè)類型名代表一個(gè)結(jié)構(gòu)體類型。例如;typedef struct char number9; char name8; char department50; STUDENT; STUDENT stud1,stud2; 上面定義的變量上面定義的變量stud1stud1和和stude2stude2都屬于結(jié)構(gòu)體變量,都屬于結(jié)構(gòu)體變量,這樣就簡(jiǎn)單化了結(jié)構(gòu)體變量的聲明。這樣就簡(jiǎn)單化了結(jié)構(gòu)體變量的聲明。 typedef int *zzbl; zzbl p, a6; 等價(jià)于等價(jià)于
17、int *p, *a6; /*p是整型指針變量,是整型指針變量,a是整型指針數(shù)組是整型指針數(shù)組*/說(shuō)明:說(shuō)明: (1)用用typedef只是給已有類型增加個(gè)別名,并只是給已有類型增加個(gè)別名,并不能創(chuàng)造個(gè)新的類型。不能創(chuàng)造個(gè)新的類型。 (2)typedef與與#define有有相似之處,但二者是不同相似之處,但二者是不同的:前者是由編譯器在編譯時(shí)處理的;后者是由編譯的:前者是由編譯器在編譯時(shí)處理的;后者是由編譯預(yù)處理器在編譯預(yù)處理時(shí)處理的,而且只能作簡(jiǎn)單的預(yù)處理器在編譯預(yù)處理時(shí)處理的,而且只能作簡(jiǎn)單的字符串替換。字符串替換。9.7 9.7 位運(yùn)算位運(yùn)算 1、位邏輯運(yùn)算符、位邏輯運(yùn)算符 按位取反按
18、位取反(與與!同級(jí)同級(jí)) 單目右結(jié)合單目右結(jié)合 & 按位與按位與 按位異或按位異或 相同取相同取0,不同取,不同取1 | 按位或按位或1、位邏輯運(yùn)算符 按位取反按位取反 & 按位與按位與 按位異或按位異或 相同取相同取0,不同取,不同取1 | 按位或按位或 x=0 00000000 00000000 y=3 00000000 00000011x&y 00000000 00000000 x|y 00000000 00000011xy 00000000 000000111010 0101 =1111 注意區(qū)分:注意區(qū)分: &和和| &和和| x & y得得 0 x | y得得 12、位移位運(yùn)算符 對(duì)操作數(shù)右移給出的位數(shù)對(duì)操作數(shù)右移給出的位數(shù) x3 將將x向左移向左移3位,空出的位用零填補(bǔ)位,空出的位用零填補(bǔ) 00111010 3 將將x向右移向右移3位位 00111010 3 000001113、復(fù)合位賦值運(yùn)算符 &= |= = = = 例:例:a&=b 相當(dāng)于相當(dāng)于 a=a&b a=2 相當(dāng)于相當(dāng)于 a=a29.8 9.8 宏定義宏定義# define 宏名標(biāo)識(shí)符 宏定
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年個(gè)人股權(quán)投資協(xié)議常用版(三篇)
- 2025年五年級(jí)老師個(gè)人的年度工作總結(jié)(五篇)
- 2025年個(gè)人攝影服務(wù)合同模板(2篇)
- 2025年中學(xué)春季學(xué)期六年級(jí)組工作總結(jié)(四篇)
- 專題01 三角函數(shù)的圖像與性質(zhì)(解析版)
- 2025年個(gè)人飯店承包經(jīng)營(yíng)合同經(jīng)典版(三篇)
- 木材檢驗(yàn)與運(yùn)輸合同
- 汽車輪胎運(yùn)輸協(xié)議范本
- 天主教堂裝修意向協(xié)議
- 學(xué)校裝修施工合同模板
- GH/T 1030-2004松花粉
- 部編版六年級(jí)下冊(cè)語(yǔ)文第3單元習(xí)作例文+習(xí)作PPT
- 四年級(jí)上冊(cè)英語(yǔ)試題-Module 9 Unit 1 What happened to your head--外研社(一起)(含答案)
- 辦理工傷案件綜合應(yīng)用實(shí)務(wù)手冊(cè)
- 子宮內(nèi)膜異位癥診療指南
- 《高級(jí)計(jì)量經(jīng)濟(jì)學(xué)》-上課講義課件
- 《現(xiàn)代氣候?qū)W》研究生全套教學(xué)課件
- 護(hù)理診斷及護(hù)理措施128條護(hù)理診斷護(hù)理措施
- 情商知識(shí)概述課件
- 九年級(jí)物理總復(fù)習(xí)教案
- 天然飲用山泉水項(xiàng)目投資規(guī)劃建設(shè)方案
評(píng)論
0/150
提交評(píng)論