这段代码是真的知道系统是小端还是大端?

Gee*_*kyJ 2 c endianness

#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;
}
Run Code Online (Sandbox Code Playgroud)

输出:

32769
32768
Run Code Online (Sandbox Code Playgroud)

snum指向unum的最初两个字节,但是它的值是unum的最后两个字节,并且在递增指针之后,value是unum的前两个字节.

所以,它是一个小端系统.但是,我不确定这种方式是否正确,以了解系统的类型.这是对的吗?

Col*_*mbo 5

当您违反严格别名规则时,您的代码会导致未定义的行为(C标准为§6.5/ 7,C++为[basic.lval]/10).代码unum通过完全不同类型的左值访问存储的值.使用C++编译器,上面的代码甚至不会编译,因为禁止在不相关的指针类型之间进行隐式转换.

使用char或unsigned char别名从对象表示中访问单个字节,这些类型从严格别名规则中排除.这是一些例子.