指针在不同数据类型中的行为

Rak*_*mar 4 c struct pointers

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)

答案是5131027.我无法理解为什么会发生这种情况.任何人都可以帮助我理解这个概念.

Yu *_*Hao 5

像这样投射指针不是一个好主意.

可能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)