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

下載本文檔

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

文檔簡介

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

2、八個連續(xù)變量代表一個字節(jié)中的八位。圖8-1-1顯示了內(nèi)存中的位分配。例如,在2020年8月12日,程序計(jì)算字符串中每個字符的奇偶校驗(yàn)碼。輸出字符及其二進(jìn)制表示,并將奇偶校驗(yàn)碼放在二進(jìn)制碼的前面,這樣奇偶校驗(yàn)碼和字符二進(jìn)制碼中的“1”的總數(shù)是偶數(shù)。#包括結(jié)構(gòu)位無符號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)中可以有另一個。示例:結(jié)構(gòu)人員結(jié)構(gòu)日期字符名稱10;int月;國際年齡;國際日;浮動工資;國際年;結(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)訪問嵌套結(jié)構(gòu)的成員時,您可以使用多個點(diǎn)運(yùn)算符從最外層到最內(nèi)層逐一列出成員名稱:worker .工資=5000.0;worker . payday . month=11;結(jié)構(gòu)人員字符名稱10;國際工資;結(jié)構(gòu)日期為月;國際日;國際年;發(fā)薪日;工人;2020/8/12、8.2聯(lián)合,聯(lián)合是一種類似于結(jié)構(gòu)的結(jié)構(gòu)類型。聯(lián)合和結(jié)構(gòu)的主要區(qū)別在于,聯(lián)合類型組件占用的內(nèi)存空間不是每個成員所需的存儲空間字節(jié)的總和,而是聯(lián)合成員中存儲空間最大的成員所需的字節(jié)。編譯器指定聯(lián)盟的所有成員共享一個公共存儲空間。在任何給定的時

5、間,只有一個成員可以駐留在一個聯(lián)合中,而對于一個結(jié)構(gòu),所有成員總是駐留在該結(jié)構(gòu)中。2020年8月12日,定義聯(lián)合類型的一般形式是:聯(lián)合聯(lián)合名稱類型變量名;鍵入變量名;聯(lián)合變量名;例如,定義一個名為數(shù)據(jù)的聯(lián)合類型和一個名為數(shù)據(jù)的結(jié)構(gòu)變量類型:聯(lián)合日期結(jié)構(gòu)日期字符;char chint numint numlong lnumlong lnum價值;價值;2020/8/12,其存儲空間分配如下:value、ch、num、lnum、union中的值變量、共享4個字節(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);與示例中的字符串相對應(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,示例:從鍵盤輸入一個由十六進(jìn)制數(shù)表示的整數(shù)(兩個字節(jié)),編寫一個程序,交換低位字節(jié)和高位字節(jié),并顯示結(jié)果。主(工會)機(jī)構(gòu);stuct字節(jié)無符號字符l,h;字節(jié);無符號整數(shù)字;a,b;“輸入數(shù)據(jù)?”);掃描( %x ,2020/8/12,運(yùn)行結(jié)果:輸入數(shù)據(jù)?3A6E6E3 A,必須指出的是,通過使用聯(lián)

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

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

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

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

11、表示的“宏標(biāo)識符”,用空格分隔,不帶“;”最后。以換行符結(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 #定義開始#定義結(jié)束、2020/8/12、使用宏替換可以提高程序的可移植性。例如,在程序中,顯示工作模式被定義為640*350,當(dāng)它被改變?yōu)?024*1024時,可以如下定義#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í)現(xiàn)宏調(diào)用。宏定義的通用格式:#定義宏標(biāo)識符(形式參數(shù)表)表達(dá)式宏調(diào)用的通用格式:宏標(biāo)識符(實(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)識符8.5.2來包含文件

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

溫馨提示

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

評論

0/150

提交評論