第8章-位域、聯(lián)合、枚舉、定義類(lèi)型及預(yù)處理功能.ppt_第1頁(yè)
第8章-位域、聯(lián)合、枚舉、定義類(lèi)型及預(yù)處理功能.ppt_第2頁(yè)
第8章-位域、聯(lián)合、枚舉、定義類(lèi)型及預(yù)處理功能.ppt_第3頁(yè)
第8章-位域、聯(lián)合、枚舉、定義類(lèi)型及預(yù)處理功能.ppt_第4頁(yè)
第8章-位域、聯(lián)合、枚舉、定義類(lèi)型及預(yù)處理功能.ppt_第5頁(yè)
已閱讀5頁(yè),還剩31頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、2020年8月12日,第8章,位域,并集,枚舉,定義類(lèi)型和預(yù)處理函數(shù),2020年8月12日,8.1.1位域是一種特殊形式的結(jié)構(gòu)構(gòu)件,需要定義位的長(zhǎng)度。位字段定義的一般形式是:結(jié)構(gòu)名類(lèi)型變量名1:長(zhǎng)度;類(lèi)型變量名長(zhǎng)度2:類(lèi)型變量名n:長(zhǎng)度;其中,冒號(hào)“:”表示使用了一個(gè)位字段,其后的長(zhǎng)度表示要分配的存儲(chǔ)單元的位數(shù)。域變量必須定義為int或無(wú)符號(hào)。8.1位字段和結(jié)構(gòu)嵌套、2020/8/12,例如:struct無(wú)符號(hào)位0:1;無(wú)符號(hào)位1:1;無(wú)符號(hào)位2:1;無(wú)符號(hào)位3:1;無(wú)符號(hào)位4:1;無(wú)符號(hào)位5:1;無(wú)符號(hào)位6:1;無(wú)符號(hào)位7:1;比特;這個(gè)結(jié)構(gòu)定義了八個(gè)成員變量,每個(gè)變量只有一個(gè)位。實(shí)際上,這

2、八個(gè)連續(xù)變量代表一個(gè)字節(jié)中的八位。圖8-1-1顯示了內(nèi)存中的位分配。例如,在2020年8月12日,程序計(jì)算字符串中每個(gè)字符的奇偶校驗(yàn)碼。輸出字符及其二進(jìn)制表示,并將奇偶校驗(yàn)碼放在二進(jìn)制碼的前面,這樣奇偶校驗(yàn)碼和字符二進(jìn)制碼中的“1”的總數(shù)是偶數(shù)。#包括結(jié)構(gòu)位無(wú)符號(hào)b0:1、b1:1、b2:1、b3:1、b4:1、b5:1、b6:1、b7:1*sp。靜態(tài)字符數(shù)據(jù)=“abcdef”;main() int bit_sum,奇偶校驗(yàn);char *dp。dp=數(shù)據(jù);2020/8/12,而(*dp!=0) sp=(結(jié)構(gòu)位*)DP;bit _ sum=sp-B0 sp-B1 sp-B2 sp-B3 sp-B

3、4 sp-b5 sp-B6;奇偶校驗(yàn)=bit _ sum % 2;printf(“% c”,* DP);Printf(%d%d%d%d%d%d%d%dn ,奇偶校驗(yàn),sp-b6,sp-b5,sp-b4,sp-b3,sp-b2,sp-b1,sp-B0);dp。2020/8/12,運(yùn)行結(jié)果為: a 1110001 b 110010 c 011001d 1100100 e 010010101 f 01100110,2020/8/12,結(jié)構(gòu)可以嵌套,即結(jié)構(gòu)中可以有另一個(gè)。示例:結(jié)構(gòu)人員結(jié)構(gòu)日期字符名稱(chēng)10;int月;國(guó)際年齡;國(guó)際日;浮動(dòng)工資;國(guó)際年;結(jié)構(gòu)日期發(fā)薪日;工人;也可以表示為:8.1.2結(jié)構(gòu)

4、、2020/8/12、2020/8/12的嵌套,結(jié)構(gòu)變量payday是嵌套在結(jié)構(gòu)人中的成員組件。當(dāng)訪(fǎng)問(wèn)嵌套結(jié)構(gòu)的成員時(shí),您可以使用多個(gè)點(diǎn)運(yùn)算符從最外層到最內(nèi)層逐一列出成員名稱(chēng):worker .工資=5000.0;worker . payday . month=11;結(jié)構(gòu)人員字符名稱(chēng)10;國(guó)際工資;結(jié)構(gòu)日期為月;國(guó)際日;國(guó)際年;發(fā)薪日;工人;2020/8/12、8.2聯(lián)合,聯(lián)合是一種類(lèi)似于結(jié)構(gòu)的結(jié)構(gòu)類(lèi)型。聯(lián)合和結(jié)構(gòu)的主要區(qū)別在于,聯(lián)合類(lèi)型組件占用的內(nèi)存空間不是每個(gè)成員所需的存儲(chǔ)空間字節(jié)的總和,而是聯(lián)合成員中存儲(chǔ)空間最大的成員所需的字節(jié)。編譯器指定聯(lián)盟的所有成員共享一個(gè)公共存儲(chǔ)空間。在任何給定的時(shí)

5、間,只有一個(gè)成員可以駐留在一個(gè)聯(lián)合中,而對(duì)于一個(gè)結(jié)構(gòu),所有成員總是駐留在該結(jié)構(gòu)中。2020年8月12日,定義聯(lián)合類(lèi)型的一般形式是:聯(lián)合聯(lián)合名稱(chēng)類(lèi)型變量名;鍵入變量名;聯(lián)合變量名;例如,定義一個(gè)名為數(shù)據(jù)的聯(lián)合類(lèi)型和一個(gè)名為數(shù)據(jù)的結(jié)構(gòu)變量類(lèi)型:聯(lián)合日期結(jié)構(gòu)日期字符;char chint numint numlong lnumlong lnum價(jià)值;價(jià)值;2020/8/12,其存儲(chǔ)空間分配如下:value、ch、num、lnum、union中的值變量、共享4個(gè)字節(jié)、value、ch、num、lnum、struct中的值變量、2020/。char s12t。t.ig0=0 x 20 49 45 42t

6、.ig1=0 x 47 4e 49 4at.ig2=0 x 00 00 0a 21printf(“% s”,t . s);與示例中的字符串相對(duì)應(yīng)的ASCII碼(十六進(jìn)制)是:B E I空間J I N G!n,42 45 49 20 4a 49 4e 47 21 0a,結(jié)果:北京!2020/8/12,示例:從鍵盤(pán)輸入一個(gè)由十六進(jìn)制數(shù)表示的整數(shù)(兩個(gè)字節(jié)),編寫(xiě)一個(gè)程序,交換低位字節(jié)和高位字節(jié),并顯示結(jié)果。主(工會(huì))機(jī)構(gòu);stuct字節(jié)無(wú)符號(hào)字符l,h;字節(jié);無(wú)符號(hào)整數(shù)字;a,b;“輸入數(shù)據(jù)?”);掃描( %x ,2020/8/12,運(yùn)行結(jié)果:輸入數(shù)據(jù)?3A6E6E3 A,必須指出的是,通過(guò)使用聯(lián)

7、合變量的所有成員共享公共存儲(chǔ)區(qū)域的特性,在編程中可以方便地交換和處理數(shù)據(jù)。上面的程序是一個(gè)類(lèi)似的例子。結(jié)構(gòu)、聯(lián)合和嵌套結(jié)構(gòu)在大型軟件開(kāi)發(fā)中被廣泛使用。2020/8/12,通過(guò)枚舉一系列由用戶(hù)自己確定的有序標(biāo)識(shí)符定義的類(lèi)型稱(chēng)為枚舉類(lèi)型。標(biāo)識(shí)符名稱(chēng)表示枚舉類(lèi)型中的一個(gè)元素,它表示一個(gè)數(shù)據(jù)值,該值有一個(gè)序列并且可以比較。枚舉類(lèi)型使用自然語(yǔ)言來(lái)表達(dá)相關(guān)信息,可以提高程序的可讀性。如:顏色、日期、貨幣、職稱(chēng)等。定義的一般形式是:枚舉枚舉名稱(chēng)枚舉表;枚舉是一個(gè)關(guān)鍵字。8.3枚舉、2020/8/12,例如:枚舉顏色黑色、藍(lán)色、紅色、綠色、白色;枚舉顏色列;可以有如下表述:col=紅色;如果(col=藍(lán)色)/

8、*處理藍(lán)色;*/如果有聲明:col=黃色;然后會(huì)產(chǎn)生一個(gè)錯(cuò)誤。編譯器將枚舉中的標(biāo)識(shí)符初始化為0n-1 . printf(“% d % d % d % d % d % d”,依次為黑色、藍(lán)色、紅色、綠色、白色);屏幕顯示: 0 1 2 3 4、2020/8/12,如果要顯示初始化,可以使用以下方法。例如:枚舉顏色黑色、藍(lán)色、紅色=5、綠色、白色);此時(shí),黑色=0、藍(lán)色=1、紅色=5、綠色=6、白色=7的枚舉元素可以在使用整數(shù)的表達(dá)式中使用。for(col=黑色;col=白色;Col)。如果只使用一個(gè)枚舉變量,則可以定義以下: enum東、西、南、北位置;2020/8/12,C語(yǔ)言允許關(guān)鍵字typ

9、edef為現(xiàn)有類(lèi)型定義新名稱(chēng)。例如,typedef int integer;整數(shù)與int同義,整數(shù)的用法與int相同,例如,integer a,sum,bb10,* p;定義的一般形式是:typedef類(lèi)型定義名稱(chēng);例如:typedef charchrChr是char的新名稱(chēng),typedef的功能不是在任何意義上創(chuàng)建新的數(shù)據(jù)類(lèi)型。只需為現(xiàn)有類(lèi)型定義一個(gè)新名稱(chēng)。8.4類(lèi)型定義、2020/8/12、和typedef也可用于為復(fù)雜數(shù)據(jù)類(lèi)型(如結(jié)構(gòu)和聯(lián)合)創(chuàng)建定義名稱(chēng)。例如,結(jié)構(gòu)出生日期字符名稱(chēng)10;int月;國(guó)際日;國(guó)際年;typedef結(jié)構(gòu)出生日期生日;這里,已定義的結(jié)構(gòu)類(lèi)型struct出生日期被

10、更改為定義名稱(chēng)生日。2020/8/12,當(dāng)您想要定義一個(gè)struct出生日期類(lèi)型并包含100個(gè)元素的結(jié)構(gòu)數(shù)組時(shí),它可以用以下形式表示:生日student100;上述定義也可以縮寫(xiě)為typedef結(jié)構(gòu)字符名稱(chēng)10;int月;國(guó)際日;國(guó)際年;生日;生日學(xué)生100;2020/8/12、8.5預(yù)處理功能C語(yǔ)言的預(yù)處理程序負(fù)責(zé)對(duì)以“#”為第一個(gè)字符的預(yù)處理控制線(xiàn)進(jìn)行分析和處理。預(yù)處理在編譯前完成。預(yù)處理控制行主要包括宏替換、文件包含、條件編譯和行控制。8.5.1宏替換定義預(yù)處理命令不僅可以定義符號(hào)常量和字符串,還可以定義帶有參數(shù)的宏。1.簡(jiǎn)單字符串替換一般形式#define宏標(biāo)識(shí)符字符串通常是用大寫(xiě)字母

11、表示的“宏標(biāo)識(shí)符”,用空格分隔,不帶“;”最后。以換行符結(jié)尾。2020/8/12、例如, #定義n 10 #定義true-1 #定義false 0 #定義on 1 #定義off 0 #定義yes 1 #定義no 0 #定義pi 3.14159 #定義e 2.7183 #定義黑色0 #定義藍(lán)色1 #定義開(kāi)始#定義結(jié)束、2020/8/12、使用宏替換可以提高程序的可移植性。例如,在程序中,顯示工作模式被定義為640*350,當(dāng)它被改變?yōu)?024*1024時(shí),可以如下定義#define XMAX 1023 #define YMAX 1023,這增加了圖形程序?qū)τ布h(huán)境的適應(yīng)性。2.帶有參數(shù)的宏定義和

12、宏調(diào)用與帶有形式參數(shù)的函數(shù)相同,宏標(biāo)識(shí)符也可以有參數(shù)。在程序中,可以用實(shí)參數(shù)代替形式參數(shù)來(lái)實(shí)現(xiàn)宏調(diào)用。宏定義的通用格式:#定義宏標(biāo)識(shí)符(形式參數(shù)表)表達(dá)式宏調(diào)用的通用格式:宏標(biāo)識(shí)符(實(shí)參數(shù)表),例如: #定義最大值(a,b) (ab)?a:b主()int x,y;x=10y=20printf(“最大數(shù)據(jù)為:%d”,最大值(x,y);替換程序是:printf(“最大數(shù)據(jù)是:% d”,(xy)?x :y);2020/8/12,例如:#定義ABS(x) (x)0)?(x):-x)#定義SIGN(x) (x)0?1:(x)=0?0:-1)撤消宏定義,并使用: # undef宏標(biāo)識(shí)符8.5.2來(lái)包含文件

13、功能:將給定包含文件的內(nèi)容嵌入到源程序文件中。一般格式:#include file name 或#include,2020/8/12,包括文件原理圖、2020/8/12,包括文件存儲(chǔ)位置,由文件路徑和文件名指定,用雙引號(hào)或尖括號(hào)括起來(lái)。系統(tǒng)同意的搜索順序是:雙引號(hào):源文件所在的當(dāng)前文件目錄系統(tǒng)指定的標(biāo)準(zhǔn)目錄尖括號(hào):直接找到指定的標(biāo)準(zhǔn)目錄。如果用戶(hù)在當(dāng)前目錄中定義了一個(gè)“font.h”文件,那么在編譯器的系統(tǒng)標(biāo)準(zhǔn)目錄中也有一個(gè)同名的“font.h”文件。當(dāng)用戶(hù)需要使用自己定義的“font.h”文件時(shí),應(yīng)該使用“#”包含“font.h”。如果使用,# include將以“字體”嵌入。h 在系統(tǒng)標(biāo)準(zhǔn)目錄中,不在用戶(hù)中。2020/8/12,函數(shù):僅在滿(mǎn)足特定條件時(shí)編譯程序的某些內(nèi)容。有三種形式:#if,#ifdef,# ifndef1。#if條件編譯一般形式: #if常量表達(dá)式第1節(jié)#else第2節(jié)#endif函數(shù)是:當(dāng)常量表達(dá)式的值為真時(shí),編譯第1節(jié),否則編譯第2節(jié)。8.5.3條件編譯、2020/8/12,例如, #定義max 10 main () # if max 99 printf(“為大于99n的數(shù)組編譯”);#else printf(“為小數(shù)組編譯”

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論