版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、sizeof的用法以及編程中的常見問題sizeof定義 返回一個對象或者類型所占的內(nèi)存字節(jié)數(shù) 實(shí)際上,sizeof計(jì)算對象的大小也是轉(zhuǎn)換成對對象類型的計(jì)算,也就是說,同種類型的不同對象其sizeof值都是一致的。 sizeof( 2 )等價(jià)于 sizeof( int ); sizeof也可以對一個函數(shù)調(diào)用求值,其結(jié)果是函數(shù)返回類型的大小,函數(shù)并不會被調(diào)用 sizeof( foo() ) /這里foo的返回值不能為空,否則非法指針變量的sizeof 指針記錄了另一個對象的地址。既然是來存放地址的,那么它當(dāng)然等于計(jì)算機(jī)內(nèi)部地址總線的寬度。所以在32位計(jì)算機(jī)中,一個指針變量的返回值必定是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)用者只需將實(shí)參的地址傳遞過去,所以a3自然為指針類型(char*),c3的值也就為4。 結(jié)構(gòu)體的sizeof 字節(jié)對齊:有助于加快計(jì)算機(jī)的取數(shù)速度 struct S1 char c; int i; struct S2 int i; char c;sizeof(S1), sizeof(S2)? 字節(jié)對齊的細(xì)節(jié)和編譯器實(shí)現(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)體,所以在尋找最寬基本類型成員時(shí),應(yīng)當(dāng)包括復(fù)合類型成員的子成員,而不是把復(fù)合成員看成是一個整體。但在確定復(fù)合類型成員的偏移位置時(shí)則是將復(fù)合類型作為整體看待。 struct S3 char c1; S1 s; char c2;; sizeof(S3)? S1的最寬簡單成員的類型為int,S3在考慮最寬簡單類型成員時(shí)是將S1“打散”看的,
5、所以S3的最寬簡單類型為int,這樣,通過S3定義的變量,其存儲空間首地址需要被4整除,整個sizeof(S3)的值也應(yīng)該被4整除。c1的偏移量為0,s的偏移量呢這時(shí)s是一個整體,它作為結(jié)構(gòu)體變量也滿足前面三個準(zhǔn)則,所以其大小為8,偏移量為4,c1與s之間便需要3個填充字節(jié),而c2與s之間就不需要了,所以c2的偏移量為12,算上c2的大小為13,13是不能被4整除的,這樣末尾還得補(bǔ)上3個填充字節(jié)。最后得到sizeof(S3)的值為16。 計(jì)算結(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、。尤其是,不要僅僅因?yàn)闊o符號數(shù)不存在負(fù)值(如年齡)而用它來表示數(shù)量。 盡量使用像int那樣的有符號類型,這樣在涉及升級混合類型的復(fù)雜細(xì)節(jié)時(shí),不必?fù)?dān)心邊界情況(如1被轉(zhuǎn)化為很大的正數(shù))。 只有在使用位段和二進(jìn)制掩碼時(shí),才使用無符號數(shù)。應(yīng)該在表達(dá)式中使用強(qiáng)制類型轉(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();/*但事實(shí)上跳到了這里*/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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024無人機(jī)研發(fā)與飛行服務(wù)合同
- 2025年度高檔別墅窗戶定制安裝與維護(hù)保養(yǎng)合同3篇
- 二零二五版程海流域生態(tài)保護(hù)與可持續(xù)發(fā)展合同2篇
- 中原地產(chǎn)房屋買賣居間協(xié)議(2024年度版)版
- 個人在線醫(yī)療咨詢服務(wù)平臺合作協(xié)議(2024版)2篇
- 未來教育趨勢與終身學(xué)習(xí)規(guī)劃的構(gòu)建
- 個人抵押借款合同書樣例版
- 2025年度金融機(jī)構(gòu)與個人消費(fèi)貸款合同范本4篇
- 2025版壓路機(jī)設(shè)備租賃及維護(hù)管理合同范本3篇
- 現(xiàn)代餐飲業(yè)營銷策略及服務(wù)流程優(yōu)化
- 泌尿:膀胱腫瘤病人的護(hù)理查房王雪-課件
- 標(biāo)點(diǎn)符號的研究報(bào)告
- 服務(wù)器報(bào)價(jià)表
- 2025年高考化學(xué)試題分析及復(fù)習(xí)策略講座
- 2024-2029年中國制漿系統(tǒng)行業(yè)市場現(xiàn)狀分析及競爭格局與投資發(fā)展研究報(bào)告
- 大門封條模板
- 【“凡爾賽”網(wǎng)絡(luò)流行語的形成及傳播研究11000字(論文)】
- ppr管件注塑工藝
- 液化氣站其他危險(xiǎn)和有害因素辨識及分析
- 高中語文教學(xué)課例《勸學(xué)》課程思政核心素養(yǎng)教學(xué)設(shè)計(jì)及總結(jié)反思
- 中國農(nóng)業(yè)銀行小微企業(yè)信貸業(yè)務(wù)貸后管理辦法規(guī)定
評論
0/150
提交評論