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的入坑之旅,今天一...