#include<stdio.h>
union node {
int i;
char c[2];
};
main() {
union node n;
n.c[0] = 0;
n.c[1] = 2;
printf("%d\n", n.i);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我认为它给出了512输出,因为c [0]值存储在第一个字节中,而c [1]值存储在第二个字节中,但给出1965097472.为什么?我在windows中的codeblocks中编译了这个程序.
你的联盟分配了四个字节,从以下开始:
[????] [????] [????] [????]
Run Code Online (Sandbox Code Playgroud)
您设置至少两个重要字节:
[????] [????] [0x02] [0x00]
Run Code Online (Sandbox Code Playgroud)
然后,您将所有四个字节打印为整数.你不一定会得到512,因为任何东西都可能是最重要的两个字节.在这种情况下,你有:
[0x75] [0x21] [0x02] [0x00]
Run Code Online (Sandbox Code Playgroud)