C语言面试题更新 2026-08-03

请说明在 C 语言编程中,判断当前系统字节序(大小端)的常见方法有哪些?

考察说明

考察对字节序概念的理解以及 C 语言中检测字节序的编程能力。

回答思路

  1. 【回答框架 1】字节序是指多字节数据类型在内存中的存储顺序。大端模式是高位字节存放在低地址,小端模式是低位字节存放在低地址。可以通过联合体或指针转换来检测当前系统的字节序。
  2. 【回答框架 2】联合体方法:定义一个包含 char 数组和 int 的联合体,将 int 赋值为 1,然后检查联合体中第一个字节的值。若为 1,则是小端;若为 0,则是大端。
  3. 【回答框架 3】指针方法:将 int 变量的地址强制转换为 unsigned char*,然后检查该指针指向的第一个字节的值。同样,值为 1 则为小端,为 0 则为大端。
  4. 【回答框架 4】示例代码(联合体方法):union { int i; char c[sizeof(int)]; } u; u.i = 1; if (u.c[0] == 1) printf("小端\n"); else printf("大端\n");
  5. 【回答框架 5】这种方法利用内存表示的直接检查,不依赖任何库函数,适用于大多数平台。
  6. 【关键点 1】字节序的检测本质上是通过检查多字节类型的最低地址处的字节值来判断。
  7. 【关键点 2】联合体或指针强制转换都是有效且常用的检测手段。
  8. 【关键点 3】将整数值 1 的第一个字节与 1 比较,如果相等则为小端,否则为大端。
  9. 【易错点 1】不要使用 union 或指针访问未定义行为的方式,例如通过 char* 修改 int 的值。
  10. 【易错点 2】注意不要混淆字节序与位序(bit order)。
  11. 【易错点 3】在某些特殊平台上,int 的大小可能不是 4 字节,应使用 sizeof(int) 来保证正确性。