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をどのように指しているか説明できますか? その説明は何ですか?私は1桁の16進数が4ビットで、1つのintが8桁の16進数を格納できることを知っていますが、最初の2文字であり、最初の2文字ではなく、お使いのシステムは、アライメント要件、そしてv = (int *) (x + 1);
(および次の2行を)持っている場合
https://en.wikipedia.org/wiki/Endianness –
ところでアライメント制限違反。 – BLUEPIXY
[厳密なエイリアシングルールとは何ですか](http://stackoverflow.com/questions/98650/what-is-the-strict-aliasing-rule) – BLUEPIXY