最近我遇到位域问题
union u
{
struct
{
unsigned char x : 2;
unsigned int y : 2;
}p;
int x;
};
int main()
{
union u u = { 2 };
printf("%d\n", u.p.x);
}
实际上按照小字节序规则打印2。位域y应该分配2为什么将2分配给x
使用时
union u u = { 2 };
根据您的实际分配成员u.p.x
,因为它是struct p
的第一个成员>]
初始化联合时,初始化程序列表必须只有一个成员,除非使用指定的初始化程序,否则初始化联合的第一个成员(自C99起)。 cppreference
如果要初始化
u.p.y
,请使用:
union u u = { {.y = 2} };
或
union u ux = { .p={ 0,2 } };