爲什麼零寬度位字段,以及爲什麼需要它的一些結構?
struct foo {
int a:3;
int b:2;
int :0; // Force alignment to next boundary.
int c:4;
int d:3;
};
int main()
{
int i = 0xFFFF;
struct foo *f = (struct foo *)&i;
printf("a=%d\nb=%d\nc=%d\nd=%d\n", f->a, f->b, f->c, f->d);
return 0;
}
上述程序的輸出是
[email protected]:~/programs/test$ ./a.out
a=-1
b=-1
c=-8
d=0
請解釋爲什麼這些值是負的,並且該結構內這些變量的存儲器佈局?
這是微軟的回答,我建議你看看:http://msdn.microsoft.com/en-us/library/ewwyfdbe(v=vs。 71).aspx,即使如此,對齊總是依賴於編譯器。 –
結構{0} {0} {0}} int a:3; int b:2; int:0; int c:4; int d:3; }; 這將給佈局 000aaabb 0ccccddd 而不是:0; 0000aaab bccccddd 0寬度字段表示應在下一個原子實體(char)上設置以下位域。聲明爲位字段的數據的排序是從低位到高位,或者取決於您的體系結構的其他方式。 –