C語言學習筆記整理

來源:互聯網
上載者:User

一.sizeof()

1.sizeof的使用:sizeof操作符以位元組形式給出了其運算元的儲存大小.

sizeof操作符不能用於函數類型,不完全類型或位欄位。不完全類型指具有未知儲存大小的資料類型,如未知儲存大小的數群組類型、未知內容的結構或等位型別、void類型等。

2.sizeof的結果:sizeof操作符的結果類型是size_t,它在標頭檔中typedef為unsigned int類型。該類型保證能容納實現所建立的最大對象的位元組大小。

int、unsigned int 、short int、unsigned short 、long int 、unsigned long 、float、double、long double類型的sizeof 在ANSI C中沒有具體規定,大小依賴於實現,一般可能分別為2、2、2、2、4、4、4、8、10。

當運算元是指標時,sizeof依賴於編譯器。near類指標位元組數為2,far、huge類指標位元組數為4。一般Unix的指標位元組數為4。

當運算元具有數群組類型時,其結果是數組的總位元組數,等位型別運算元的sizeof是其最大位元組成員的位元組數。

結構類型運算元的sizeof是這種類型對象的總位元組數,包括任何墊補在內.

如果運算元是函數中的數組形參或函數類型的形參,sizeof給出其指標的大小。

struct MyStruct

{

char dda;//位移量為0,滿足對齊,dda佔用1個位元組;

double dda1;//下一個可用的地址的位移量為1,不是sizeof(double)=8

//的倍數,需要補足7個位元組才能使位移量變為8(滿足對齊

//方式),因此VC自動填滿7個位元組,dda1存放在位移量為8

//的地址上,它佔用8個位元組。

int type;//下一個可用的地址的位移量為16,是sizeof(int)=4的倍

//數,滿足int的對齊,所以不需要VC自動填滿,type存

//放在位移量為16的地址上,它佔用4個位元組。

};//所有成員變數都分配了空間,空間總的大小為1+7+8+4=20,不是結構

//的節邊界數(即結構中佔用最大空間的類型所佔用的位元組數sizeof

//(double)=8)的倍數,所以需要填充4個位元組,以滿足結構的大小為

//sizeof(double)=8的倍數

所以該結構總的大小為:sizeof(MyStruc)為1+7+8+4+4=24。其中總的有7+4=11個位元組是VC自動填滿的,沒有放任何有意義的東西.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.