#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类型的第一个字节的值来判断机器的字节序,是一种更加可靠的方法。*/