前段時間接連到公司面試,其中這些公司包括什么華為,文思創(chuàng)新以及其他一些不出名的或忘了叫什么名字的垃圾公司,跑了不少路,做了不少的筆試題,感覺關(guān)于sizeof的運算相關(guān)的題目較多,自己將題做的一片糊涂,回來后親自寫了實驗來驗證。先帖代碼:
再帖轉(zhuǎn)載來的6條理論:sizeof操作符的結(jié)果類型是size_t,它在頭文件中typedef為unsigned int類型。該類型保證能容納實現(xiàn)所建立的最大對象的字節(jié)大小。 1、若操作數(shù)具有類型char、unsigned char或signed char,其結(jié)果等于1。 ANSI C正式規(guī)定字符類型為1字節(jié)。 2、int、unsigned int 、short int、unsigned short 、long int 、unsigned long 、float、double、long double類型的sizeof 在ANSI C中沒有具體規(guī)定,大小依賴于實現(xiàn),一般可能分別為4、4、2、2、4、4、4、8、10。 sizeof(c) = 1; 3、當操作數(shù)是指針時,sizeof依賴于編譯器。例如Microsoft C/C++7.0中,near類指針字節(jié)數(shù)為2,far、huge類指針字節(jié)數(shù)為4。一般Unix的指針字節(jié)數(shù)為4。 對于示例程序中的sizeof s,根據(jù)第3條,s是個字符串的指針,輸出為 sizeof s :4 4、當操作數(shù)具有數(shù)組類型時,其結(jié)果是數(shù)組的總字節(jié)數(shù)。 對于sizeof d[] ,根據(jù)第4條,d是數(shù)組類型,返回的是數(shù)組的字節(jié)數(shù)再加上末尾的null一字節(jié),sizeof d[] = hello : 6 5、聯(lián)合類型操作數(shù)的sizeof是其最大字節(jié)成員的字節(jié)數(shù)。結(jié)構(gòu)類型操作數(shù)的sizeof是這種類型對象的總字節(jié)數(shù),包括任何墊補在內(nèi)。 讓我們看如下結(jié)構(gòu): struct {char b; double x;} a; 在某些機器上sizeof(a)=12,而一般sizeof(char)+ sizeof(double)=9。 這是因為編譯器在考慮對齊問題時,在結(jié)構(gòu)中插入空位以控制各成員對象的地址對齊。如double類型的結(jié)構(gòu)成員x要放在被4整除的地址。 對于sizeof t ,對齊后t的大小為20故輸出結(jié)果為sizeof t :20 6、如果操作數(shù)是函數(shù)中的數(shù)組形參或函數(shù)類型的形參,sizeof給出其指針的大小。 sizeof ch :4
Powered by: C++博客 Copyright © 小天狼星