Код выглядит следующим образом.Не могу понять вывод
#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 может хранить 8 шестнадцатеричных цифр, но не может понять, как x указывает на EF, а не 00, которые являются первыми двумя буквами и почему последние две буквы, а не первые два.
https://en.wikipedia.org/wiki/Endianness –
BTW Нарушение ограничения выравнивания. – BLUEPIXY
[Что такое строгое правило псевдонимов?] (Http://stackoverflow.com/questions/98650/what-is-the-strict-aliasing-rule) – BLUEPIXY