結構體(類)位制

2022-04-01 05:17:38 字數 914 閱讀 3195

若靜態變數 static int i; 是全域性變數,則 sizeof(i) = 4; //儲存在靜態區

若靜態變數存在於結構體或類中,則sizeof(a) = 1;//靜態變數也儲存於靜態區,結構體的大小只計算非靜態變數。

對空類或結構體,使用sizeof會返回1;//因為,如果類或結構體占用記憶體為0話,無法例項化並區分,故編譯器為了使空類能夠例項化分配了1byte。

structa ;

int a::i = 1;

如果類中存在虛函式的話,類的大小增加乙個指向虛函式表的指標的大小。

結構體位制

當資料儲存不需要占用完整的乙個位元組,只需要幾位或者一位二進位制位的時候,為了節省空間,c語言提出的一種資料結構,稱「位域」或者「位段」。位域即把乙個位元組按位劃分成區域。

經測試,發現結構體位制以下特點:

1. 位域的成員可以是char、short、int、unsigned型別。

2.命名的位域位寬不能為0,長度為0的位域不能指定名字,否則編譯出錯。

3.長度為0的位域的作用是使下乙個成員從下乙個儲存單位(大小與定義位域的型別有關)開始存放;

4.位域之外的其他記憶體的值並不受到改變;0位域沒有使定義位域外的值賦為0。(gcc/vc6.0編譯的結果)

例如以下程式:

初始記憶體分布情況:從0x22ff68出開始,

記憶體變化情況如下:

結果為:

位結構體和位域

1.位域的定義 有些資訊在儲存時,並不需要占用乙個完整的位元組,而只需佔幾個或乙個二進位制位。例如在存放乙個開關量時,只有0和1 兩種狀態,用一位二進位即可。為了節省儲存空間,並使處理簡便,c語言又提供了一種資料結構,稱為 位域 或 位段 所謂 位域 是把乙個位元組中的二進位劃分為幾個不同的區域,並...

結構體之位域(位段)

有些資訊在儲存時,並不需要占用乙個完整的位元組,而只需佔幾個或乙個二進位制位。例如在存放乙個開關量時,只有0和1 兩種狀態,用一位二進位即可。為了節省儲存空間,並使處理簡便,c語言又提供了一種資料結構,稱為 位域 或 位段 所謂 位域 是把乙個位元組中的二進位劃分為幾 個不同的區域,並說明每個區域的...

結構體之位域(位段)

有些資訊在儲存時,並不需要占用乙個完整的位元組,而只需佔幾個或乙個二進位制位。例如在存放乙個開關量時,只有0和1 兩種狀態,用一位二進位即可。為了節省儲存空間,並使處理簡便,c語言又提供了一種資料結構,稱為 位域 或 位段 所謂 位域 是把乙個位元組中的二進位劃分為幾 個不同的區域,並說明每個區域的...