#include<stdio.h>
int main()
{
unsigned int unum = 0x80008001;
short unsigned int *snum = (short unsigned int*)&unum;
printf("%d\n", *snum);
printf("%d\n", *(snum+1));
return 0;
}
输出:
32769
32768
snum指向unum的前两个字节,但其值是unum的最后两个字节,在递增指针之后,value是unum的前两个字节。
因此,这是一个小端系统。
但是,我不确定这种方法是否正确,不知道系统的类型。
合适吗
最佳答案
当您违反严格的别名规则(对于C标准为§6.5/ 7,对于C++为[basic.lval] / 10),您的代码会引发 undefined 的行为。该代码通过完全不同类型的左值访问unum
的存储值。使用C++编译器,由于禁止在不相关的指针类型之间进行隐式强制转换,因此上述代码甚至无法编译。
使用char
或unsigned char
别名从对象表示形式访问单个字节,这些类型从严格的别名规则中排除。 Here是示例。