一路题目 求解释
一道题目 求解释C/C++ codeunion{int ichar x[2]}aint main(int argc, char* argv[]){a.x[0] 10a.x[
一道题目 求解释
C/C++ codeunion{ int i; char x[2];}a;int main(int argc, char* argv[]){ a.x[0] = 10; a.x[1] = 1; cout<<a.i<<endl; return 0;}
为什么最后输出的是266?a.i为什么是266?跟踪了一下 的确是266 但是不知道为什么
[解决办法]两道题类似。
http://topic.csdn.net/u/20121010/22/11f4bc7f-ce17-47ad-9103-78f708fd8405.html
[解决办法]他们公用同一块内存。
于是内存这样分配的。
0A
01
00
00
由于是little-endian下,这样读取,
0000010A = 266
[解决办法]共用体中的所有成员共享一段公共的存储区,所以共用体所占内存字节数与其成员中字节数最多的那个成员相等,因此变量中的所有成员的首地址相同。
union
{
int i;//4个字节
char x[2];//2个字节
}a;
所以共用体a占用4个字节。