版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、sizeof的用法以及編程中的常見問題sizeof定義 返回一個對象或者類型所占的內(nèi)存字節(jié)數(shù) 實際上,sizeof計算對象的大小也是轉(zhuǎn)換成對對象類型的計算,也就是說,同種類型的不同對象其sizeof值都是一致的。 sizeof( 2 )等價于 sizeof( int ); sizeof也可以對一個函數(shù)調(diào)用求值,其結(jié)果是函數(shù)返回類型的大小,函數(shù)并不會被調(diào)用 sizeof( foo() ) /這里foo的返回值不能為空,否則非法指針變量的sizeof 指針記錄了另一個對象的地址。既然是來存放地址的,那么它當(dāng)然等于計算機內(nèi)部地址總線的寬度。所以在32位計算機中,一個指針變量的返回值必定是4(注意結(jié)果
2、是以字節(jié)為單位)。數(shù)組的sizeof 數(shù)組的sizeof值等于數(shù)組所占用的內(nèi)存字節(jié)數(shù) 數(shù)組元素的個數(shù) char a1 = abc; int c1 = sizeof( a1 ) / sizeof( char ); / 總長度/單個元素的長度int c2 = sizeof( a1 ) / sizeof( a10 ); / 總長度/第一個元素的長度 一個問題: void foo3(char a33) int c3 = sizeof( a3 ); / c3 = void foo4(char a4) int c4 = sizeof( a4 ); / c4 = c3,c4值應(yīng)該是多少呢? 問題的解答: 這
3、里函數(shù)參數(shù)a3已不再是數(shù)組類型,而是蛻變成指針,相當(dāng)于char* a3。數(shù)組是“傳址”的,調(diào)用者只需將實參的地址傳遞過去,所以a3自然為指針類型(char*),c3的值也就為4。 結(jié)構(gòu)體的sizeof 字節(jié)對齊:有助于加快計算機的取數(shù)速度 struct S1 char c; int i; struct S2 int i; char c;sizeof(S1), sizeof(S2)? 字節(jié)對齊的細(xì)節(jié)和編譯器實現(xiàn)相關(guān),但一般而言,滿足三個準(zhǔn)則:1) 結(jié)構(gòu)體變量的首地址能夠被其最寬基本類型成員的大小所整除;2) 結(jié)構(gòu)體每個成員相對于結(jié)構(gòu)體首地址的偏移量(offset)都是成員大小的整數(shù)倍,如有需要編
4、譯器會在成員之間加上填充字節(jié)(internal adding);3) 結(jié)構(gòu)體的總大小為結(jié)構(gòu)體最寬基本類型成員大小的整數(shù)倍,如有需要編譯器會在最末一個成員之后加上填充字節(jié)(trailing padding)。 說明: 由于結(jié)構(gòu)體的成員可以是復(fù)合類型,比如另外一個結(jié)構(gòu)體,所以在尋找最寬基本類型成員時,應(yīng)當(dāng)包括復(fù)合類型成員的子成員,而不是把復(fù)合成員看成是一個整體。但在確定復(fù)合類型成員的偏移位置時則是將復(fù)合類型作為整體看待。 struct S3 char c1; S1 s; char c2;; sizeof(S3)? S1的最寬簡單成員的類型為int,S3在考慮最寬簡單類型成員時是將S1“打散”看的,
5、所以S3的最寬簡單類型為int,這樣,通過S3定義的變量,其存儲空間首地址需要被4整除,整個sizeof(S3)的值也應(yīng)該被4整除。c1的偏移量為0,s的偏移量呢這時s是一個整體,它作為結(jié)構(gòu)體變量也滿足前面三個準(zhǔn)則,所以其大小為8,偏移量為4,c1與s之間便需要3個填充字節(jié),而c2與s之間就不需要了,所以c2的偏移量為12,算上c2的大小為13,13是不能被4整除的,這樣末尾還得補上3個填充字節(jié)。最后得到sizeof(S3)的值為16。 計算結(jié)構(gòu)體大小的公式: 結(jié)構(gòu)體的大小等于最后一個成員的偏移量加上其大小再加上末尾的填充字節(jié)數(shù)目,即: sizeof( struct ) = offsetof(
6、 last item ) + sizeof( last item ) + sizeof( trailing padding)編程中的常見錯誤 整數(shù)的取值范圍 char a300=0; U8 i=0; for (;i300;i+) . 無符號數(shù) int array=23,24,12,17,204,99,16; #define TATOL_ELEMENTS (sizeof(array)/sizeof(array0)main() int d=-1,x; if(d= TATOL_ELEMENTS-2) x=arrayd+1; c專家編程建議: 盡量不要在你的代碼中使用無符號類型,以免增加不必要的復(fù)雜性
7、。尤其是,不要僅僅因為無符號數(shù)不存在負(fù)值(如年齡)而用它來表示數(shù)量。 盡量使用像int那樣的有符號類型,這樣在涉及升級混合類型的復(fù)雜細(xì)節(jié)時,不必?fù)?dān)心邊界情況(如1被轉(zhuǎn)化為很大的正數(shù))。 只有在使用位段和二進(jìn)制掩碼時,才使用無符號數(shù)。應(yīng)該在表達(dá)式中使用強制類型轉(zhuǎn)換,是操作數(shù)均為有符號數(shù)或無符號數(shù),這樣就不必由編譯器來選擇結(jié)果的類型。 case語句漏掉break break中斷了什么?network_code()switch(line)case thing1: doit1(); break;case thing2: if(x = STUFF) do_first_stuff(): if(y = other_stuff) break; do_later_stuff(); /*代碼的意圖是跳到這里*/ initialize_modes_pointer(); break;default: processing();/*但事實上跳到了這里*/user_modes_p
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度文化產(chǎn)品出口代理協(xié)議模板3篇
- 2025年度征收補償與安置補償協(xié)議執(zhí)行監(jiān)督辦法4篇
- 2024年04月湖南國家開發(fā)銀行湖南分行暑期實習(xí)生招考筆試歷年參考題庫附帶答案詳解
- 個人汽車租借協(xié)議2024年標(biāo)準(zhǔn)格式樣張版B版
- 2025年度文化創(chuàng)意產(chǎn)業(yè)園區(qū)場地租賃管理協(xié)議4篇
- 個人與公司買賣合同范本完整版
- 2025年度文化產(chǎn)業(yè)園區(qū)場地合作開發(fā)合同協(xié)議書4篇
- 2024版室外房屋墻面裝修合同書版B版
- 2025年度化妝品全球包銷代理合同范本4篇
- 2024裝飾裝修合同的法律適用
- 2023年全國統(tǒng)一建筑工程預(yù)算工程量計算規(guī)則完整版
- 教科版四年級科學(xué)下冊第三單元巖石與土壤4.制作巖石和礦物標(biāo)本(教學(xué)設(shè)計)教案
- 大學(xué)《工程力學(xué)》期末考試試題庫含詳細(xì)答案
- 2022年湖北省武漢市中考數(shù)學(xué)試卷含解析
- TLFSA 003-2020 危害分析與關(guān)鍵控制點(HACCP)體系調(diào)味面制品生產(chǎn)企業(yè)要求
- LY/T 2244.3-2014自然保護(hù)區(qū)保護(hù)成效評估技術(shù)導(dǎo)則第3部分:景觀保護(hù)
- 紀(jì)律教育月批評與自我批評五篇
- GB/T 26480-2011閥門的檢驗和試驗
- GB/T 13342-2007船用往復(fù)式液壓缸通用技術(shù)條件
- 藥店員工教育培訓(xùn)資料
- GB 20371-2016食品安全國家標(biāo)準(zhǔn)食品加工用植物蛋白
評論
0/150
提交評論