编辑代码

#include <stdio.h>

typedef struct {
    char c;
    int i;
    double d;
} ExampleStruct;

int main() {
    ExampleStruct s;
    printf("Sizeof(struct) = %zu\n", sizeof(s));
    printf("Address of c: %p\n", (void*)&s.c);
    printf("Address of i: %p\n", (void*)&s.i);
    printf("Address of d: %p\n", (void*)&s.d);

    if ((int)s.c == 0x01) {
        printf("Byte order: big-endian\n");//高存低,低存高
    } else {
        printf("Byte order: little-endian\n");//高地址存放高位//0x00
        printf("%d\n",(int)s.c);
    }

    return 0;
}



/*在这个程序中,我们之所以使用char类型的第一个字节的值来判断机器的字节序,而不是通过地址判断,是因为每个CPU架构都有不同的内存布局和对齐方式。
因此,在某些体系结构中,即使在内存中使用了小端模式,也可能会导致char类型的第一个字节存储在高位地址上。

另外,我们可以确保最低有效字节始终存储在相同的地址上,但是无法保证最高有效字节始终存储在相同的地址上。
相反,我们可以根据char类型的第一个字节的值来判断机器的字节序,因为该值始终存储在相同的地址上,并且在大多数机器上都具有可预测的值。
因此,通过char类型的第一个字节的值来判断机器的字节序,是一种更加可靠的方法。*/