0
代码如下所示。无法理解输出
#include<stdio.h>
int main(){
int vals[2];
char *x;
int *v, *v2, *v3;
vals[0] = 0x00ABCDEF;
vals[1] = 0x12345678;
x = (char *) &vals[0];
v = (int *) (x + 1);
v2 = (int *) (x+2);
v3 = (int *) (x+3);
printf ("%x \n", *x); /*0x EF */
printf ("%x \n", *v); /*0x 7800ABCD */
printf ("%x \n", *v2); /*0x 567800AB */
printf ("%x \n", *v3); /*0x 34567800 */
}
评论中的值是输出。 你能解释x如何指向EF以及v,v2,v3。 这是什么解释。我知道一个十六进制数字是四位,一个int可以存储八位十六进制数字,但无法理解x如何指向EF,而不是00,这是前两个字母,为什么是最后两个字母而不是前两个。
https://en.wikipedia.org/wiki/Endianness –
顺便说一下排列限制违规。 – BLUEPIXY
[什么是严格的别名规则?](http://stackoverflow.com/questions/98650/what-is-the-strict-aliasing-rule) – BLUEPIXY