struct check{
unsigned short a;
unsigned short b;
};
static unsigned char v[5] = {1,2,3,4,5};
struct check *p = (struct check *)v;
printf("%d",p->a);
printf("\t%d",p->b);
Run Code Online (Sandbox Code Playgroud)
答案是513和1027.我无法理解为什么会发生这种情况.任何人都可以帮助我理解这个概念.
像这样投射指针不是一个好主意.
可能unsigned short是你的机器上有2个字节,并且在强制转换后,p->a得到值0x0201,即十进制513,并p->b得到值0x0403,即十进制1027.
请注意,在具有不同endianess的计算机上,结果会有所不同.例如,在我的机器上,输出是258(0x0102)和772(0x0304).
另请注意,您应该使用格式说明符%u来打印unsigned类型的值:
printf("%u\t%u\n", p->a, p->b);
Run Code Online (Sandbox Code Playgroud)