据我所知,在C编程语言中,数组按元素存储在内存元素中。 (即元素0,元素1,元素2,......,元素n)。我试图通过以下代码看到它:
unsigned char a[] = { '\1' , '\2', '\3' ,'\4' };
printf("%d\n", (int*) a);
因为unsigned char是1个字节而整数是4个字节;我认为必须打印价值:
<00> 00000001 00000010 00000011 00000100 = 2 ^ 2 + 2 ^ 8 + 2 ^ 9 + 2 ^ 17 + 2 ^ 24 = 16909060
但是,当我运行此程序时,它会为每次试验产生不同的结果。
我在这里缺少什么?
答案 0 :(得分:4)
您可能想要使用*(int *)a
,否则您只是打印一个地址。
但是,这将调用实现定义的行为:
char
数组可能无法正确对齐,无法作为int
读取。char
读取int *
数组的假设执行时髦的优化 - 您正在破坏所谓的严格别名规则