1

据我所知,在 C 编程语言中,数组是逐个元素存储在内存中的。(即元素 0、元素 1、元素 2、...、元素 n)。我正在尝试使用以下代码查看:

unsigned char a[] = { '\1' , '\2', '\3' ,'\4' };  
printf("%d\n", (int*) a);

由于 unsigned char 是 1 个字节,而整数是 4 个字节;我认为它必须打印值:

00000001 00000010 00000011 00000100 = 2^2 + 2^8 + 2^9 + 2^17 + 2^24 = 16909060

但是,当我运行这个程序时,它会为每次试验产生不同的结果。

我在这里想念什么?

4

1 回答 1

5

您可能想使用*(int *)a,否则您只是在打印地址。

但是,这将调用实现定义的行为:

  • 根据平台的字节序,您将获得不同的结果。
  • 根据平台的不同,char数组可能无法正确对齐以读取为int.
  • char编译器可能会基于您永远不会通过 an 读取数组的假设执行时髦的优化int *- 您正在打破所谓的严格别名规则。
于 2012-04-30T17:42:27.817 回答