當我在我的Mac上運行sizeof(r)。它說sizeof(r)= 1。我的理解是,聯盟的規模是其最大元素的大小。在這種情況下,最大的元素不應該是結構體?奇怪的sizeof()結果
union
{
struct
{
char i:1;
char j:2;
char m:3;
}s;
char ch;
}r;
當我在我的Mac上運行sizeof(r)。它說sizeof(r)= 1。我的理解是,聯盟的規模是其最大元素的大小。在這種情況下,最大的元素不應該是結構體?奇怪的sizeof()結果
union
{
struct
{
char i:1;
char j:2;
char m:3;
}s;
char ch;
}r;
你的聯合由兩部分組成,一個結構和一個字符。因爲共享內存,union的大小是最大元素的大小,加上它所粘貼的任何填充的大小(在你的情況下是0字節)。
首先,讓我們來看看每個大小ideone報告:
http://ideone.com/LAhop
好了,都是1。因此,聯合體的大小必須是1爲好。
結構由位域組成。一個是1位,一個是2,另一個是3.這使得一個字節中總共有8個位中有6個位。由於無論如何它必須至少有一個字節(位字段的大小並不是位),因此大小爲1.
至於字符,以下是C++ 11標準在§3.9.1/ 1中所說的內容[basic.fundamental]:
Objects declared as characters (char) shall be large enough to store any member
of the implementation’s basic character set.
對於幾乎每一個平臺,這是一個字節。
這是一個字節。
罷工最後一句話。這是一個字節的**定義**。 – 2012-07-25 07:35:13
@R ..,已經很晚了。 – chris 2012-07-25 07:37:58
聯合的大小必須至少大於其最大元素的大小。例如。 'union x {short s; char byte b [3]; };'我在一個平臺上的大小是4,而'short'的大小是2,'char [3]'的大小是...... 3. – 2012-07-25 08:04:18
的的struct佔用了1 + 2 + 3 = 6比特,其配合到1個字節和其與一個char爲1個字節unioning。因此答案是1個字節。
從技術上講,你的位域總共有0.75字節的大小,而字符1字節。我沒有看到問題。 – chris 2012-07-25 06:45:19
@chris你能詳細解答一下嗎?謝謝! – 2012-07-25 06:46:38
可能在那一刻,r是char ch,而不是s結構。 – levi 2012-07-25 06:47:02