![sizeof的用法以及編程中的常見問題_第1頁](http://file4.renrendoc.com/view14/M0A/05/2D/wKhkGWc1iI-AONF3AAB2xtHDf8k452.jpg)
![sizeof的用法以及編程中的常見問題_第2頁](http://file4.renrendoc.com/view14/M0A/05/2D/wKhkGWc1iI-AONF3AAB2xtHDf8k4522.jpg)
![sizeof的用法以及編程中的常見問題_第3頁](http://file4.renrendoc.com/view14/M0A/05/2D/wKhkGWc1iI-AONF3AAB2xtHDf8k4523.jpg)
![sizeof的用法以及編程中的常見問題_第4頁](http://file4.renrendoc.com/view14/M0A/05/2D/wKhkGWc1iI-AONF3AAB2xtHDf8k4524.jpg)
![sizeof的用法以及編程中的常見問題_第5頁](http://file4.renrendoc.com/view14/M0A/05/2D/wKhkGWc1iI-AONF3AAB2xtHDf8k4525.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
sizeof的用法(yònɡfǎ)以及編程中的常見問題共十八頁sizeof定義(dìngyì)返回一個(gè)對(duì)象或者類型所占的內(nèi)存(nèicún)字節(jié)數(shù)實(shí)際上,sizeof計(jì)算對(duì)象的大小也是轉(zhuǎn)換成對(duì)對(duì)象類型的計(jì)算,也就是說,同種類型的不同對(duì)象其sizeof值都是一致的。sizeof(2)等價(jià)于sizeof(int);sizeof也可以對(duì)一個(gè)函數(shù)調(diào)用求值,其結(jié)果是函數(shù)返回類型的大小,函數(shù)并不會(huì)被調(diào)用
sizeof(foo())//這里foo的返回值不能為空,否則非法共十八頁指針(zhǐzhēn)變量的sizeof指針記錄了另一個(gè)對(duì)象的地址。既然(jìrán)是來存放地址的,那么它當(dāng)然等于計(jì)算機(jī)內(nèi)部地址總線的寬度。所以在32位計(jì)算機(jī)中,一個(gè)指針變量的返回值必定是4(注意結(jié)果是以字節(jié)為單位)。共十八頁數(shù)組的sizeof數(shù)組的sizeof值等于(děngyú)數(shù)組所占用的內(nèi)存字節(jié)數(shù)數(shù)組元素的個(gè)數(shù)chara1[]="abc";intc1=sizeof(a1)/sizeof(char);//總長度/單個(gè)元素的長度
intc2=sizeof(a1)/sizeof(a1[0]);//總長度/第一個(gè)元素的長度共十八頁一個(gè)(yīɡè)問題:voidfoo3(chara3[3])
{
intc3=sizeof(a3);//c3==
}
voidfoo4(chara4[])
{
intc4=sizeof(a4);//c4==
}
c3,c4值應(yīng)該是多少呢?
共十八頁問題的解答:這里函數(shù)參數(shù)a3已不再(bùzài)是數(shù)組類型,而是蛻變成指針,相當(dāng)于char*a3。數(shù)組是“傳址”的,調(diào)用者只需將實(shí)參的地址傳遞過去,所以a3自然為指針類型(char*),c3的值也就為4。共十八頁結(jié)構(gòu)(jiégòu)體的sizeof字節(jié)對(duì)齊(duìqí):有助于加快計(jì)算機(jī)的取數(shù)速度structS1
{
charc;
inti;
};structS2
{
inti;
charc;
};
sizeof(S1),sizeof(S2)?共十八頁字節(jié)對(duì)齊的細(xì)節(jié)和編譯器實(shí)現(xiàn)相關(guān),但一般而言,滿足三個(gè)準(zhǔn)則:
1)結(jié)構(gòu)體變量的首地址能夠被其最寬基本(jīběn)類型成員的大小所整除;
2)結(jié)構(gòu)體每個(gè)成員相對(duì)于結(jié)構(gòu)體首地址的偏移量(offset)都是成員大小的整數(shù)倍,如有需要編譯器會(huì)在成員之間加上填充字節(jié)(internaladding);
3)結(jié)構(gòu)體的總大小為結(jié)構(gòu)體最寬基本(jīběn)類型成員大小的整數(shù)倍,如有需要編譯器會(huì)在最末一個(gè)成員之后加上填充字節(jié)(trailingpadding)。共十八頁說明:由于結(jié)構(gòu)體的成員可以是復(fù)合類型,比如另外一個(gè)結(jié)構(gòu)體,所以在尋找最寬基本類型成員時(shí),應(yīng)當(dāng)(yīngdāng)包括復(fù)合類型成員的子成員,而不是把復(fù)合成員看成是一個(gè)整體。但在確定復(fù)合類型成員的偏移位置時(shí)則是將復(fù)合類型作為整體看待。structS3
{
charc1;
S1s;
charc2;
};
sizeof(S3)?共十八頁S1的最寬簡單成員的類型為int,S3在考慮最寬簡單類型成員時(shí)是將S1“打散”看的,所以S3的最寬簡單類型為int,這樣(zhèyàng),通過S3定義的變量,其存儲(chǔ)空間首地址需要被4整除,整個(gè)sizeof(S3)的值也應(yīng)該被4整除。
c1的偏移量為0,s的偏移量呢這時(shí)s是一個(gè)整體,它作為結(jié)構(gòu)體變量也滿足前面三個(gè)準(zhǔn)則,所以其大小為8,偏移量為4,c1與s之間便需要3個(gè)填充字節(jié),而c2與s之間就不需要了,所以c2的偏移量為12,算上c2的大小為13,13是不能被4整除的,這樣(zhèyàng)末尾還得補(bǔ)上3個(gè)填充字節(jié)。最后得到sizeof(S3)的值為16。共十八頁計(jì)算結(jié)構(gòu)體大小的公式:結(jié)構(gòu)體的大小等于最后一個(gè)成員的偏移量加上其大小再加上末尾的填充字節(jié)(zìjié)數(shù)目,即:sizeof(struct)=offsetof(lastitem)+sizeof(lastitem)+sizeof(trailingpadding)共十八頁編程中的常見(chánɡjiàn)錯(cuò)誤整數(shù)(zhěngshù)的取值范圍chara[300]={0};U8i=0;…for(;i<300;i++){...}共十八頁無符號(hào)(fúhào)數(shù)intarray[]={23,24,12,17,204,99,16};#defineTATOL_ELEMENTS(sizeof(array)/sizeof(array[0]))main(){intd=-1,x;…if(d<=TATOL_ELEMENTS-2)x=array[d+1];…}共十八頁《c專家編程》建議:盡量不要(bùyào)在你的代碼中使用無符號(hào)類型,以免增加不必要的復(fù)雜性。尤其是,不要(bùyào)僅僅因?yàn)闊o符號(hào)數(shù)不存在負(fù)值(如年齡)而用它來表示數(shù)量。盡量使用像int那樣的有符號(hào)類型,這樣在涉及升級(jí)混合類型的復(fù)雜細(xì)節(jié)時(shí),不必?fù)?dān)心邊界情況(如-1被轉(zhuǎn)化為很大的正數(shù))。只有在使用位段和二進(jìn)制掩碼時(shí),才使用無符號(hào)數(shù)。應(yīng)該在表達(dá)式中使用強(qiáng)制類型轉(zhuǎn)換,是操作數(shù)均為有符號(hào)數(shù)或無符號(hào)數(shù),這樣就不必由編譯器來選擇結(jié)果的類型。共十八頁case語句漏掉breakbreak中斷(zhōngduàn)了什么?network_code(){switch(line){casething1:doit1();break;casething2:if(x==STUFF){do_first_stuff():if(y==other_stuff)break;do_later_stuff();}/*代碼的意圖是跳到這里…*/initialize_modes_pointer();break;default:processing();}/*但事實(shí)上跳到了這里*/user_modes_pointer();/*致使modes_pointer未初始化*/}共十八頁直接(zhíjiē)使用數(shù)字1.c:intg_array[20];2.cmemset(g_array,0,20);后來:intg_array[18];導(dǎo)致內(nèi)存越界共十八頁《c陷阱(xiànjǐng)和缺陷》共十八頁內(nèi)容(nèiróng)總結(jié)sizeof的用法以及編程中的常見問題。所以在32位計(jì)算機(jī)中,一個(gè)指針變量的返回值必定是4(注意結(jié)果是以字節(jié)為單位)。intarray[]={23,24,12,17
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學(xué)二年級(jí)數(shù)學(xué)口算題上冊(cè)
- 2022年新課標(biāo)八年級(jí)上冊(cè)道德與法治《第九課 樹立總體國家安全觀 》聽課評(píng)課記錄(2課時(shí))
- 9-1生活需要法律 2法律保障生活 聽課評(píng)課記錄 新部編人教版七年級(jí)下冊(cè)道德與法治
- 人教版地理七年級(jí)上冊(cè)第四節(jié)《世界的氣候》聽課評(píng)課記錄5
- 華師大版歷史九年級(jí)上冊(cè)第16課《啟蒙運(yùn)動(dòng)》聽課評(píng)課記錄
- 戶外廣告制作合同范本
- 三方委托出口合同范本
- 二零二五年度知乎共享空間租賃合作協(xié)議
- SBS防水卷材購貨合同范本
- 公司租賃合同范本
- 2024新滬教版英語(五四學(xué)制)七年級(jí)上單詞默寫單
- 電力兩票培訓(xùn)
- TCCEAS001-2022建設(shè)項(xiàng)目工程總承包計(jì)價(jià)規(guī)范
- 2024.8.1十七個(gè)崗位安全操作規(guī)程手冊(cè)(值得借鑒)
- 二次供水衛(wèi)生管理制度及辦法(4篇)
- 中學(xué)生手機(jī)使用管理協(xié)議書
- 給排水科學(xué)與工程基礎(chǔ)知識(shí)單選題100道及答案解析
- 2024年土地變更調(diào)查培訓(xùn)
- 2024年全國外貿(mào)單證員鑒定理論試題庫(含答案)
- 新版中國食物成分表
- DB11∕T 446-2015 建筑施工測量技術(shù)規(guī)程
評(píng)論
0/150
提交評(píng)論