你真的了解sizeof 麼?

2022-04-01 23:21:34 字數 1737 閱讀 1221

sizeof並不是c語言和c++語言中的乙個函式,而是乙個關鍵字,乙個操作符。

它的作用是返回乙個物件或者型別名的長度,也就是說這個物件或者型別所佔的記憶體位元組數。它的返回值型別為size_t(usinged int),長度的單位是位元組。

1)對基本資料型別運用sizeof操作,得到其占用記憶體的位元組數。

如 int

a;   

double

d;   

printf("%d"

,sizeof

a);   

printf("%d"

, sizeof

d);   

它的輸出是4 和 8,因為int在記憶體中占用4個位元組,double在記憶體中占用8個位元組。

2)對指標做sizeof操作,得到的將是存放指標所需的記憶體大小。

char

c = 

'c';   

inta = 10;   

double

d = 3.14;   

char

*cp = &c;   

int*ap = &a;   

double

*dp = &d;   

printf("%d %d %d"

,sizeof

(cp),

sizeof

(ap),

sizeof

(dp)); 

// 4 4 4 

printf("%d %d %d"

,sizeof

(*cp),

sizeof

(*ap),

sizeof

(*dp)); 

// 1 4 8 

對於32位的及其來說,每個指標的占用的記憶體大小都是乙個字,亦即32位,也就是4位元組,所以第一行輸出的是4 4 4 ,對於第二行不用多說,對指標解引用,就是輸出的實際上是每個變數的sizeof ,1 4 8

3)對陣列做sizeof操作等效於將對其元素型別做sizeof操作的結果乘上陣列元素的個數。

double

a=;   

double

*p = a;   

printf("%d %d %d"

,,sizeof

(a),

sizeof

(*p),

sizeof

(p)); 

//32 8 4 

第乙個sizeof是輸出陣列a在記憶體中的總長度;第二個sizeof實際是輸出陣列a的第乙個元素(p指標指向其第乙個元素)2在記憶體中所佔的位元組數,因為是double型別,所以輸出8;第三個sizeof是輸出指標p在記憶體中所佔的位元組數,如2)所示,為四個位元組。

4)對結構體做sizeof操作時得到的是整個結構體所占用記憶體的大小,但是需要注意的是,結構體構造的時候不足4位元組的型別在記憶體中實際占用了4個位元組,這就是所謂的記憶體對齊。

struct

c   

cobing;   

printf("%d"

,sizeof

(cobing)); 

//16 

為什麼是16而不是13呢?這是因為雖然char是乙個位元組,但是在結構體定義的記憶體中它占用了整整32位,也就是4個位元組,加4個位元組的int,和8個位元組的double,就是16個位元組。

對於sizeof始終要記住的就是:它對某個物件或者型別操作,得出的是這個物件或型別在記憶體中實際占用的位元組數,返回的是乙個usinged int型別的整數。以上分析均是針對32位的機器。

你真的了解sizeof 麼?

sizeof並不是c語言和c 語言中的乙個函式,而是乙個關鍵字,乙個操作符。它的作用是返回乙個物件或者型別名的長度,也就是說這個物件或者型別所佔的記憶體位元組數。它的返回值型別為size t usinged int 長度的單位是位元組。1 對基本資料型別運用sizeof操作,得到其占用記憶體的位元組...

你真的了解Http協議麼

網際網路就是具有通訊和線路功能而位置不同的多個計算機的一種 簡稱萬物互聯 https和http區別http協議與其說是協議 不如說是規定 通過瀏覽器和伺服器進行資料互動,進行超文字傳輸 底層就是tcp ip 所以get和post的底層也是tcp ip,也就是說,get post都是tcp鏈結。get...

你真的了解盒模型麼

說到前端,大家第一反應是不是都是vue react webpack等這些大大小小的框架或者工具,但其實這些都是和js相關的,真正的樣式會被大家忽略。其實真正呈現給大家看到華麗的頁面,都是樣式才讓他們多了那份色彩。那麼大家覺得簡單的css樣式,真的簡單麼?讓我們一起來看下,開啟css的入坑之旅,今天一...