遇到这样一个面试题目,让说出u.d的值。
#include <stdio.h>
#define u_char unsigned char
typedef union U
{
struct
{
char a : 8;
char b : 8;
char c : 8;
char d : 8;
}s;
int d;
}U;
int main()
{
U u;
u.d = 0;
u.s.a = 1; //如果是给
u.s.b = 2;
u.s.c = 3;
u.s.d = 4;
printf("%d\n", u.d);
return 0;
}
不妄加揣测了,直接看调试截图再来理解:
按照赋值顺序应该是以union为主导0在了1的前边,高地址存的低位。打印的时候,是正常的小端读取方式。
还有一点,union的存的方法我在笔试中答成了是按照大端的方式存的,现在说来它是一个畸形儿,什么端都不是,就是直接存的。