版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(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)定義了八個成員變量,每個變量只有一個位。實際上,這
2、八個連續(xù)變量代表一個字節(jié)中的八位。圖8-1-1顯示了內(nèi)存中的位分配。例如,在2020年8月12日,程序計算字符串中每個字符的奇偶校驗碼。輸出字符及其二進制表示,并將奇偶校驗碼放在二進制碼的前面,這樣奇偶校驗碼和字符二進制碼中的“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,奇偶校驗;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;奇偶校驗=bit _ sum % 2;printf(“% c”,* DP);Printf(%d%d%d%d%d%d%d%dn ,奇偶校驗,sp-b6,sp-b5,sp-b4,sp-b3,sp-b2,sp-b1,sp-B0);dp。2020/8/12,運行結(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)的成員時,您可以使用多個點運算符從最外層到最內(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碼(十六進制)是:B E I空間J I N G!n,42 45 49 20 4a 49 4e 47 21 0a,結(jié)果:北京!2020/8/12,示例:從鍵盤輸入一個由十六進制數(shù)表示的整數(shù)(兩個字節(jié)),編寫一個程序,交換低位字節(jié)和高位字節(jié),并顯示結(jié)果。主(工會)機構(gòu);stuct字節(jié)無符號字符l,h;字節(jié);無符號整數(shù)字;a,b;“輸入數(shù)據(jù)?”);掃描( %x ,2020/8/12,運行結(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ù)值,該值有一個序列并且可以比較。枚舉類型使用自然語言來表達相關(guān)信息,可以提高程序的可讀性。如:顏色、日期、貨幣、職稱等。定義的一般形式是:枚舉枚舉名稱枚舉表;枚舉是一個關(guān)鍵字。8.3枚舉、2020/8/12,例如:枚舉顏色黑色、藍色、紅色、綠色、白色;枚舉顏色列;可以有如下表述:col=紅色;如果(col=藍色)/
8、*處理藍色;*/如果有聲明:col=黃色;然后會產(chǎn)生一個錯誤。編譯器將枚舉中的標(biāo)識符初始化為0n-1 . printf(“% d % d % d % d % d % d”,依次為黑色、藍色、紅色、綠色、白色);屏幕顯示: 0 1 2 3 4、2020/8/12,如果要顯示初始化,可以使用以下方法。例如:枚舉顏色黑色、藍色、紅色=5、綠色、白色);此時,黑色=0、藍色=1、紅色=5、綠色=6、白色=7的枚舉元素可以在使用整數(shù)的表達式中使用。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ù)處理程序負責(zé)對以“#”為第一個字符的預(yù)處理控制線進行分析和處理。預(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 #定義藍色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ù)來實現(xiàn)宏調(diào)用。宏定義的通用格式:#定義宏標(biāo)識符(形式參數(shù)表)表達式宏調(diào)用的通用格式:宏標(biāo)識符(實參數(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常量表達式第1節(jié)#else第2節(jié)#endif函數(shù)是:當(dāng)常量表達式的值為真時,編譯第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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度綠色家居產(chǎn)品免責(zé)任協(xié)議書3篇
- 2025年度農(nóng)村土地租賃與農(nóng)業(yè)廢棄物資源化利用項目合作合同2篇
- 二零二五年度全新音樂節(jié)演出活動承辦服務(wù)合同3篇
- 2025年度年度合伙開設(shè)中式快餐連鎖店合同3篇
- 2025年度農(nóng)村土地互換與農(nóng)業(yè)綠色發(fā)展合作協(xié)議
- 二零二五年度建筑用石材采購與加工合作協(xié)議3篇
- 二零二五年度現(xiàn)代化工廠生產(chǎn)線整體轉(zhuǎn)讓協(xié)議3篇
- 2025年度養(yǎng)老院老人外出社區(qū)活動安全保障合同3篇
- 二零二五年度金融科技基金公司投資合作協(xié)議3篇
- 二零二五年度房地產(chǎn)開發(fā)企業(yè)借款合同3篇
- 2021年貴安新區(qū)產(chǎn)業(yè)發(fā)展控股集團有限公司招聘筆試試題及答案解析
- 安全文化培訓(xùn) (注冊安工再培訓(xùn))課件
- 色粉-MSDS物質(zhì)安全技術(shù)資料
- 骨科學(xué)研究生復(fù)試真題匯總版
- 石油化工鋼結(jié)構(gòu)工程施工及驗收規(guī)范
- 遼海版六年級音樂上冊第8單元《3. 演唱 姐妹們上場院》教學(xué)設(shè)計
- 形勢任務(wù)教育宣講材料第一講——講上情
- 物業(yè)安全員考核實施細則
- 中國地質(zhì)大學(xué)(武漢)教育發(fā)展基金會籌備成立情況報告
- 第四章破產(chǎn)法(破產(chǎn)法)教學(xué)課件
- PE拖拉管施工方案標(biāo)準(zhǔn)版
評論
0/150
提交評論