sizeof 的用法以及注意點

2021-05-24 07:45:01 字數 1414 閱讀 5642

c語言裡的sizeof 是乙個計算資料儲存空間大小的單目運算子,它返回資料所佔的位元組個數, 我們可以先來看看msnd裡的定義:

sizeof operator

sizeof expression

the sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (including aggregate types). this keyword returns a value of type size_t.

the expression is either an identifier or a type-cast expression (a type specifier enclosed in parentheses).

這段話大概講的就是:

1:sizeof運算子可以得到變數和型別儲存空間的大小,大小是以位元組為單位的,如乙個變數a所佔的空間是2個位元組,那麼sizeof(a) == 2。

2:如果a是乙個資料型別,那麼必須加括號表示為sizeof(a)形式,如果a是變數sizeof a也是可以的,但通常都寫成sizeof(a)形式。

3:當sizeof 應用於結構體或變數時,它返回實際所佔的空間大小,這個空間可能包括編繹器為了記憶體對齊而插入的額外的位元組。

4:當sizeof應用於靜態多維陣列時,它返回整個資料的大小,但sizeof 不能應用於對態分配的陣列。

下面舉例說明sizeof的運用

1. 用於型別

sizeof(int) //返回4,表示整形數占4個位元組,其實這個與系統有關, 一般linux和32位windows都返回4;

sizeof(char) //返回1;

struct student ;

sizeof(student);// 返回24;

struct student ;

sizeof(student);// 返回8, 這裡為什麼會返回8呢,乙個int佔4個位元組, 乙個char佔乙個位元組, 應該是5個位元組啊, 其實不這樣的, 編繹器為了更高效率而使得記憶體對齊, 為char ***另外插入了3個位元組, 所以返回8;

2. 用於變數

int a = 100;

sizeof(a);//返回4, 一般根據它的型別而決定它所佔空間大小

long float f = 33.00;

sizeof(f );//返回8,

char *p;

sizeof(p );//返回4, 這裡p是乙個指標變數,sizeof(p)返回這個指標變數所佔的空間大小, 而不是字元p所佔的空間大小(乙個字元只佔乙個位元組)。

3. 用於陣列

int int_arr[5];

sizeof(int_arr);//返回20, 而不是5,當用於陣列時, 它返回這個陣列所點的總位元組數, 而不是陣列無素的個數;

C const注意點以及用法

在我學習c 的過程中,對const的應用不可不說是最容易混亂和最容易出錯的。但是const卻是乙個好東西,每乙個c 程式設計師都必須掌握它。以下為本人的一點總結。1 用const 修飾函式的引數 如果引數作輸出用,不論它是什麼資料型別,也不論它採用 指標傳遞 還是 引用傳遞 都不能加const 修飾...

group concat的用法 及注意點

group concat的預設分隔符是 若要改為其他分隔符,則使用separator來指定,例如 mysql select student id,group concat courses id separator as courses from student courses where stude...

BigDecimal用法和注意點

不可變的 任意精度的有符號十進位制數。bigdecimal 由任意精度的整數非標度值 和 32 位的整數標度 scale 組成。如果為零或正數,則標度是小數點後的位數。如果為負數,則將該數的非標度值乘以 10 的負 scale 次冪。因此,bigdecimal 表示的數值是 unscaledvalu...