




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、10.1 10.1 共用體類型與共用體變量共用體類型與共用體變量返回10.2 10.2 共用體變量的引用共用體變量的引用10.3 10.3 共用體變量的應用共用體變量的應用10.4 10.4 位運算與位段結構位運算與位段結構10.5 10.5 枚舉類型枚舉類型10.6 10.6 類型定義類型定義10.1 10.1 共用體類型與共用體類型與 共用體變量共用體變量 共用體是共用體是C的由用戶定義的數據類型。共用體把的由用戶定義的數據類型。共用體把不同類型的數據項組成一個整體,這些不同類型的數不同類型的數據項組成一個整體,這些不同類型的數據項在內存中所占用的起始單元是相同的。據項在內存中所占用的起始
2、單元是相同的。1. 共用體類型的定義共用體類型的定義共用體類型定義用關鍵字共用體類型定義用關鍵字union標識,標識, 形式為:形式為: 下一頁下一頁第 1 0 章 共 用 體 與 枚 舉 類 型上一頁上一頁union 標識符標識符 成員說明列表成員說明列表; 標識符給出共用體名,標識符給出共用體名, 是共用體類型名的主體,是共用體類型名的主體, 定義的共用體類型由定義的共用體類型由“union 標識符標識符”標識。標識。 例如,定義一個共用體類型,例如,定義一個共用體類型, 要求包含一個整要求包含一個整型成員,一個字符型成員和一個單精度型成員:型成員,一個字符型成員和一個單精度型成員: un
3、ion icfint i; char c; float f; ; 下一頁下一頁第 1 0 章 共 用 體 與 枚 舉 類 型上一頁上一頁2 共用體變量的定義共用體變量的定義 (1) 先定義共用體類型,先定義共用體類型, 再定義共用體變量:再定義共用體變量: union 共用體名共用體名 成員表成員表; union 共用體名共用體名 變量表;變量表; 例如:例如:union data int i; char ch; float f; ; union data a,b,c;下一頁下一頁第 1 0 章 共 用 體 與 枚 舉 類 型上一頁上一頁(2) 定義共用體類型的同時定義共用體變量定義共用體類型
4、的同時定義共用體變量例如:例如:union data int i; char ch; float f; a,b,c; 下一頁下一頁第 1 0 章 共 用 體 與 枚 舉 類 型上一頁上一頁union 共用體名共用體名 成員表成員表 變量表;變量表;(3)定義共用體類型時,省略共用體類型名,同時定義共用體類型時,省略共用體類型名,同時定義共用體類型變量定義共用體類型變量union 成員表成員表 變量表;變量表;第 1 0 章 共 用 體 與 枚 舉 類 型例如:例如:union int i; char ch; float f;a,b,c; 返回10.2 10.2 共用體變量的引用共用體變量的引用
5、 共用體變量不能直接使用,只能使用里面的某共用體變量不能直接使用,只能使用里面的某個成員,其成員同樣通過點運算描述。形式為:個成員,其成員同樣通過點運算描述。形式為: 共用體變量名共用體變量名. .成員名成員名 例如,定義上面共用體類型變量例如,定義上面共用體類型變量a ,a占有占有4個個字節的空間,字節的空間,a.i 表示其整型成員,表示其整型成員,a.ch表示其字符表示其字符型成員,型成員,a.f表示其單精度型成員。表示其單精度型成員。 下一頁下一頁第 1 0 章 共 用 體 與 枚 舉 類 型上一頁上一頁 (1) 共用體變量中,可以包含若干個成員及若干種類型,共用體變量中,可以包含若干個
6、成員及若干種類型,但共用體成員不能同時使用。在每一時刻,只有一個成員但共用體成員不能同時使用。在每一時刻,只有一個成員及一種類型起作用,不能同時引用多個成員及多種類型。及一種類型起作用,不能同時引用多個成員及多種類型。下一頁下一頁第 1 0 章 共 用 體 與 枚 舉 類 型上一頁上一頁說明(2) 共用體變量中起作用的成員值是最后一次存放的成共用體變量中起作用的成員值是最后一次存放的成員值,即共用體變量所有成員共用同一段內存單元,后員值,即共用體變量所有成員共用同一段內存單元,后來存放的值將原先存放的值覆蓋,故只能使用最后一次來存放的值將原先存放的值覆蓋,故只能使用最后一次給定的成員值。如:給
7、定的成員值。如: a.i=278, a.ch=D, a.f=5.78;不能企圖通過下面的不能企圖通過下面的printf函數得到函數得到a.i和和a.ch的值:的值: printf(“%d,%c,%f”, a.i, a.ch, a.f);但能得到但能得到a.f的值。的值。(3) 共用體變量的地址和它的各個成員的地址相同。共用體變量的地址和它的各個成員的地址相同。(4) 不能企圖引用共用體變量名來得到某成員的值。不能企圖引用共用體變量名來得到某成員的值。 (5) 共用體變量不能作函數參數,函數的返回值也不共用體變量不能作函數參數,函數的返回值也不能是共用體類型。能是共用體類型。 (6) 共用體類型
8、和結構體類型可以相互嵌套,共用體共用體類型和結構體類型可以相互嵌套,共用體中成員可以為數組,甚至還可以定義共用體數組。中成員可以為數組,甚至還可以定義共用體數組。 下一頁下一頁第 1 0 章 共 用 體 與 枚 舉 類 型上一頁上一頁寫出下列程序的執行結果寫出下列程序的執行結果main()union exx int a,b; structint c,d;lpp;e=10;e.b=e.a+20;e.lpp.c=e.a+e.b;e.lpp.d=e.a*e.b;printf(“%d,%dn”,e.lpp.c,e.lpp.d);第 1 0 章 共 用 體 與 枚 舉 類 型例例10.1運行結果:運行結
9、果: 60,3600返回 設有若干教師的數據,包含有教師編號、姓設有若干教師的數據,包含有教師編號、姓名、職稱,若職稱為講師,則描述他們的所講課程,名、職稱,若職稱為講師,則描述他們的所講課程,若職稱為教授,則描述他們所寫論文數目。若職稱為教授,則描述他們所寫論文數目。 下一頁下一頁第 1 0 章 共 用 體 與 枚 舉 類 型上一頁上一頁10.3 10.3 共用體變量的應用共用體變量的應用例例10.2點擊點擊查看程序請查看程序請10.4 10.4 位運算與位段結構位運算與位段結構 位是指二進制數的一位,其值為位是指二進制數的一位,其值為0或或1。 位段以位為單位定義結構體(或共用體)位段以位
10、為單位定義結構體(或共用體)中成員所占存儲空間的長度。中成員所占存儲空間的長度。 含有位段的結構體類型稱為位段結構含有位段的結構體類型稱為位段結構。下一頁下一頁第 1 0 章 共 用 體 與 枚 舉 類 型上一頁上一頁10.4.1 10.4.1 位運算位運算 在用位運算符進行數的運算時,數是以補碼在用位運算符進行數的運算時,數是以補碼的形式參加運算的。的形式參加運算的。1. 1. 位運算位運算( (主要有:主要有:&、|、)(1)&(按位(按位“與與”)運算規則為:運算規則為:0&0=0,0&1=0,1&0=0,1&1=1例如,例如,-5&
11、;3的值為的值為3。其中。其中-5的補碼(為簡便起見,的補碼(為簡便起見,用用8位二進制表示)為位二進制表示)為1111 1011,3的補碼為的補碼為0000 0011,按位與的結果為按位與的結果為0000 0011,即值為十進制數,即值為十進制數3。下一頁下一頁第 1 0 章 共 用 體 與 枚 舉 類 型上一頁上一頁(2 2)| |(按位(按位“或或”)運算規則為:運算規則為:0|0=0,0|1=1,1|0=1,1|1=1例如例如,-5|3的值為的值為-5。-5與與3相位或后得相位或后得11111011,其真值為其真值為-0000101,即,即-5。(3 3) (按位(按位“異或異或”)運
12、算規則為:運算規則為:00=0,01=1,10=1,11=0例如,例如,-53的值為的值為-8。(4 4) (按位(按位“取反取反”)運算規則為:運算規則為:0=1,1=0例如,例如,7的值為的值為-8。(5 5)(“左移左移”)例如例如,3(“右移右移”)移動對象為正數時,高位補移動對象為正數時,高位補0。為負數時,邏輯右。為負數時,邏輯右移,高位補移,高位補0;算術右移,高位補;算術右移,高位補1。Turbo C采用采用的是算術右移,有的的是算術右移,有的C語言版本則采用邏輯右移。語言版本則采用邏輯右移。例如,例如,-32,將,將3右移右移2位,左邊(最高位)補位,左邊(最高位)補1,結果
13、為結果為-1。下一頁下一頁第 1 0 章 共 用 體 與 枚 舉 類 型上一頁上一頁10.4.2 10.4.2 位段結構位段結構 位段結構也是一種結構體類型,只不過其中含有位段結構也是一種結構體類型,只不過其中含有以位為單位定義存儲長度的整數類型位段成員。采用以位為單位定義存儲長度的整數類型位段成員。采用位段結構既節省存儲空間,又可方便操作。位段結構既節省存儲空間,又可方便操作。 位段結構中位段的定義格式為:位段結構中位段的定義格式為: unsigned unsigned : 例如:例如:struct bytedataunsigned a:2; /*位段位段a,占,占2位位*/ unsigne
14、d:6; /*無名位段,占無名位段,占6位,但不能訪問位,但不能訪問*/ unsigned:0; /*無名位段,占無名位段,占0位,表下一位段從下一位,表下一位段從下一字邊界開始字邊界開始*/ unsigned b:10; /*位段位段b,占,占10位位*/ int i; /*成員成員i,從下一字邊界開始,從下一字邊界開始*/data;下一頁下一頁第 1 0 章 共 用 體 與 枚 舉 類 型上一頁上一頁(1)一個位段必須存儲在同一存儲單元(即字)之)一個位段必須存儲在同一存儲單元(即字)之中,不能跨兩個單元。如果其單元空間不夠,則剩中,不能跨兩個單元。如果其單元空間不夠,則剩余空間不用,從下
15、一個單元起存放該位段。余空間不用,從下一個單元起存放該位段。(2)可以通過定義長度為)可以通過定義長度為0的位段的方式使下一位的位段的方式使下一位段從下一存儲單元開始。段從下一存儲單元開始。下一頁下一頁第 1 0 章 共 用 體 與 枚 舉 類 型上一頁上一頁位段數據的引用,同結構體成員中的數據引用一樣,位段數據的引用,同結構體成員中的數據引用一樣,但應注意位段的最大取值范圍不要超出二進制位數定但應注意位段的最大取值范圍不要超出二進制位數定的范圍,否則超出部分會丟棄。的范圍,否則超出部分會丟棄。例如例如:data.a=2; 但但 data.a=10;就超出范圍(就超出范圍(a占占2位,位,最大
16、最大3)關于位段數據,注意以下幾點關于位段數據,注意以下幾點(3)可以定義無名位段。)可以定義無名位段。(4)位段的長度不能大于存儲單元的長度。)位段的長度不能大于存儲單元的長度。(5)位段無地址,不能對位段進行取地址運算。)位段無地址,不能對位段進行取地址運算。(6)位段可以以)位段可以以%d,%o,%x格式輸出。格式輸出。(7)位段若出現在表達式中,將被系統自動轉換成)位段若出現在表達式中,將被系統自動轉換成整數。整數。 下一頁下一頁第 1 0 章 共 用 體 與 枚 舉 類 型上一頁上一頁 編程將一個編程將一個1616進制整數(占進制整數(占2 2字節)的各位字節)的各位循環左移循環左移
17、4 4個二進制位,如個二進制位,如2fe12fe1循環左移循環左移4 4個二進制個二進制位后為位后為fe12fe12。具體步驟為具體步驟為:(1)取出)取出16進制整數進制整數x的最高的最高4個二進制位至個二進制位至y: y=x(16-4)&0 xf。(2)將該整數)將該整數x(占(占2字節)左移字節)左移4個二進制位:個二進制位: x=(x(16-4)&0 xf; x=(x4)&0 xffff; /*16位的位的C語言程序不需要語言程序不需要“按位按位與與”0 xffff*/ x=x|y; printf(“循環左移循環左移4個二進制位得:個二進制位得:%x”,x);請
18、輸入請輸入16進制整數:進制整數:2fe1循環左移循環左移4個二進制位得:個二進制位得:fe12第 1 0 章 共 用 體 與 枚 舉 類 型(3)將先前取出的最高將先前取出的最高4個二進制位放入低個二進制位放入低4個二進個二進 制制位:位: x=x|y。運行結果運行結果返回10.5 10.5 枚舉類型枚舉類型 1. 枚舉類型的定義枚舉類型的定義 v枚舉類型定義用關鍵字枚舉類型定義用關鍵字enum標識,形式為:標識,形式為: enum 標識符標識符 枚舉數據表枚舉數據表; 標識符用來區分不同的枚舉類型,定義的枚舉類標識符用來區分不同的枚舉類型,定義的枚舉類型用型用enum標識符標識符”標識。標
19、識。 v枚舉數據(枚舉常量)是一些特定的標識符,枚舉數據(枚舉常量)是一些特定的標識符, 標識標識符代表什么含義,完全由程序員決定。數據枚舉的順符代表什么含義,完全由程序員決定。數據枚舉的順序規定了枚舉數據的序號,從序規定了枚舉數據的序號,從0開始,依次遞增。開始,依次遞增。 下一頁下一頁第 1 0 章 共 用 體 與 枚 舉 類 型上一頁上一頁(1) 定義枚舉類型定義枚舉類型status, 包含復制與刪除兩種狀態:包含復制與刪除兩種狀態: enum statuscopy, delete; 枚舉類型枚舉類型status僅有兩個數據,一個是僅有兩個數據,一個是copy,一,一個是個是delete
20、, 序號為序號為0、 1, 代表復制與刪除。代表復制與刪除。 下一頁下一頁第 1 0 章 共 用 體 與 枚 舉 類 型上一頁上一頁例如例如 (2) 定義枚舉類型定義枚舉類型color,包含紅、黃、藍、白、黑,包含紅、黃、藍、白、黑五種顏色:五種顏色: enum color red, yellow, blue, white, black; 枚舉類型枚舉類型color有有red、 yellow、 blue、 white、 black五個數據,五個數據, 序號為序號為0、 1、 2、 3、 4, 代表紅、代表紅、 黃、黃、 藍、藍、 白、白、 黑五種顏色。黑五種顏色。 下一頁下一頁第 1 0 章
21、共 用 體 與 枚 舉 類 型上一頁上一頁 (3) 定義枚舉類型定義枚舉類型weekday, 包含一周的七天:包含一周的七天: enum weekday sun, mon, tue, wed, thu, fri, sat; 枚舉類型枚舉類型weekday有有sun、 mon、 tue、 wed、 thu、 fri、sat七個數據,七個數據, 序號為序號為0、 1、 2、 3、4、 5、 6, 代表一周中代表一周中的星期天、星期一、星期二、星期三、星期四、的星期天、星期一、星期二、星期三、星期四、 星期五、星星期五、星期六。期六。 在定義枚舉類型時,程序員可在枚舉數據時通過在定義枚舉類型時,程序
22、員可在枚舉數據時通過“=”號號自己規定序號,并影響后面的枚舉數據的序號,后繼序號以此自己規定序號,并影響后面的枚舉數據的序號,后繼序號以此遞增。例如:遞增。例如: enum status copy=6, delete; 則則copy的序號為的序號為6, delete的序號為的序號為7。 下一頁下一頁第 1 0 章 共 用 體 與 枚 舉 類 型上一頁上一頁2. 枚舉類型變量的定義枚舉類型變量的定義 先定義枚舉類型,先定義枚舉類型, 再定義枚舉類型變量:再定義枚舉類型變量:enum 標識符標識符 枚舉數據表枚舉數據表; enum 標識符標識符 變量表;變量表; (2) 在定義枚舉類型的同時定義枚
23、舉類型變量:在定義枚舉類型的同時定義枚舉類型變量: enum 標識符標識符 枚舉數據表枚舉數據表 變量表;變量表; (3) 直接定義枚舉類型變量:直接定義枚舉類型變量: enum 枚舉數據表枚舉數據表 變量表;變量表; 下一頁下一頁第 1 0 章 共 用 體 與 枚 舉 類 型上一頁上一頁 例如,例如, 對枚舉類型對枚舉類型enum color, 定義枚舉變量定義枚舉變量c1、 c2: enum color red, yellow, blue, white, black; enum color c1, c2; 或或enum color red,yellow,blue,white,black c
24、1,c2; 或或enum red, yellow, blue, white, black c1,c2; 下一頁下一頁第 1 0 章 共 用 體 與 枚 舉 類 型上一頁上一頁枚舉類型數據可以進行賦值運算。枚舉類型是有序枚舉類型數據可以進行賦值運算。枚舉類型是有序類型,類型, 枚舉類型數據還可以進行關系運算。枚舉類型枚舉類型數據還可以進行關系運算。枚舉類型數據的比較轉化成對序號進行比較,數據的比較轉化成對序號進行比較, 只有同一種枚舉只有同一種枚舉類型的數據才能進行比較。類型的數據才能進行比較。 枚舉類型數據不能直接輸入輸出。枚舉類型數據輸枚舉類型數據不能直接輸入輸出。枚舉類型數據輸入時,先輸入
25、其序號,再進行強制類型轉換完成。輸入時,先輸入其序號,再進行強制類型轉換完成。輸出時,采用開關語句先進行判斷,再轉化成對應字符出時,采用開關語句先進行判斷,再轉化成對應字符串輸出。串輸出。 下一頁下一頁第 1 0 章 共 用 體 與 枚 舉 類 型上一頁上一頁使用強制類型轉換,可將整數值(枚舉值序號)使用強制類型轉換,可將整數值(枚舉值序號)轉換成對應枚舉值。轉換成對應枚舉值。 例如:例如: c1=(enum color )2; /*c1得到枚舉值得到枚舉值blue*/將枚舉型數據按整型格式輸出,可得到整數值(枚將枚舉型數據按整型格式輸出,可得到整數值(枚 舉變量值的序號)。舉變量值的序號)。
26、 某口袋中有紅、某口袋中有紅、 黃、黃、 藍、藍、 白、白、 黑五種顏色黑五種顏色的球若干個,每次從口袋中取出三個球,問得到三種不的球若干個,每次從口袋中取出三個球,問得到三種不同顏色的球有多少種取法,并輸出每種組合結果。同顏色的球有多少種取法,并輸出每種組合結果。 不用枚舉類型:不用枚舉類型: 第 1 0 章 共 用 體 與 枚 舉 類 型例例10.4點擊點擊請請采用枚舉類型來描述數據。設用采用枚舉類型來描述數據。設用red表示紅色球,表示紅色球,yellow表示黃色球,表示黃色球,blue表示藍色球,表示藍色球,white 表示白表示白色球,色球, black表示黑色球。表示黑色球。 點擊
27、點擊請請返回10.6 10.6 類型定義類型定義v 在使用標準類型定義或說明變量時,可只寫標準類在使用標準類型定義或說明變量時,可只寫標準類型名指明變量數據類型。而用前面介紹的結構體、共型名指明變量數據類型。而用前面介紹的結構體、共用體、枚舉等類型定義或說明變量時要冠以表明數據用體、枚舉等類型定義或說明變量時要冠以表明數據類型類別的關鍵字,如類型類別的關鍵字,如struct、union、enum等。等。v C語言提供了用語言提供了用typedef定義類型,為類型命名的機定義類型,為類型命名的機制。制。v 用用typedef定義新的類型名后,對于結構體、共用定義新的類型名后,對于結構體、共用體或枚舉類型,使用它們定義或說明變量時不必再冠體或枚舉類型,使用它們定義或說明變量時不必再冠以類型類別關鍵字。以類型類別關鍵字。下一頁下一頁第 1 0 章 共 用 體 與 枚 舉 類 型上一頁上一頁1. 1. 簡單的名字替換簡單的名字替換 typedef int INTEGER;意思是將意思是將int型定義為型定義為INTEGER,這兩者等價,在程,這兩者等價,在程序中就可以用序中就可以用INTEGER作為類型名來定義變量了。作為類型名來定義變量了。例如:例如:INTEGER x,y;相當于相當于int
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 民族信仰活動方案
- 樓盤民俗活動方案
- 殘疾人公益徒步活動方案
- 沈陽公司旅游活動方案
- 江蘇銀行廳堂活動方案
- 河南民俗策劃活動方案
- 植物漂染活動方案
- 母嬰店洗浴活動方案
- 汽車美食活動方案
- 漢堡店如何活動方案
- 出租房退房協議(通用5篇)
- 婚前醫學檢查證明(含存根)
- 防靜電手環測試指導書
- GB/T 19806-2005塑料管材和管件聚乙烯電熔組件的擠壓剝離試驗
- 社區工作者招聘考試筆試題庫大全(含答案詳解)
- 碼頭承包經營合同
- DB37T2367-2022《回彈法檢測砌筑砂漿抗壓強度技術規程》
- 對生活飲用水的衛生監督
- 2022江蘇省中央財政補貼型奶牛養殖保險條款
- 樂山市口腔醫院門診牙科診所醫療機構企業地址名單目錄
- WTO世界貿易組織概論期末復習題
評論
0/150
提交評論