2011-11-06 84 views
6
struct x 
{ 
    char a : 1; // statement 1 
    char c : 3; // statement 2 
}; 

如果這個結構是什麼尺寸。陳述1和陳述2的含義是什麼?給定結構的大小

+5

它們不是語句,而是位域聲明。 –

回答

10

那些聲明聲明位域
這意味着a佔用內存1位和c佔用3位的內存。

的結構的大小將是:
ATLEAST 4個比特 +填充(比特)

,最有可能的,這將是8 bits即:1 byte

因爲,
如果一系列位字段不會加上int的大小,可以發生填充。填充量由結構構件的對齊特徵決定。

什麼是位域?
From IBM documentation:

C和C++允許整數成員要存儲到存儲空間小於所述編譯器通常會允許。這些節省空間的結構成員稱爲位字段,它們的位寬可以顯式聲明。位字段用於必須強制數據結構對應於固定硬件表示並且不可移植的程序中。

用於聲明一個比特字段是如下的語法:

>> - type_specifier - + ------------ + - : - constant_expression - ; - - > < 「-declarator-」

的位字段聲明包含一個類型說明符接着任選的聲明符,冒號,恆定整數表達式,表示在比特字段寬度,和分號。位字段聲明可能不使用任何類型限定符,const或volatile。