有没有谁会C语言啊,帮我解决下面的题呗

来源:百度知道 编辑:UC知道 时间:2024/06/21 21:54:01
unions_date
{int i;
char ch;
float f;
}x; 问x占内存多少字节?(答案给的是1)

unton
{int i;
chat c[2];
}x;
main()
{
x.c[0]=12;
x.c[1]=1;
printf("%d\n",x.i);
}问结果是多少?(答案是268)
我想问思路和解题的过程,我不明白答案为什么是这个,谢谢了!

其实这个答案不是确定的,你没了解C语言的变量赋值规律
联合体(共用体,很多名词)意思是共用内存单元,例如
unions
{int i;
char ch;
float f;
}x; 这里的X不可能是1.因为他们以占最大内存的变量为准,即使你用了float f,这个x还是4个字节,所以你这里写答案1肯定错了

最后这个地方unton
{int i;
chat c[2];
}x;

看好这个地方
x.c[0]=12; 12(十进制) = 00001100(二进制,8位1个字节)
x.c[1]=1; 1(十进制)= 00000001(二进制,8位1个字节)这里要注意,因为有2个字节,这里是高8位,所以要叠加在低八位前面,就是
0000000100001100,就是268(十进制),希望你能理解
以后有问题加我Q,14692605,我学的也是程序设计,学的不好,不过可以讨论讨论,加的时候标记下身份就好,就此别过

第一个答案是错的

12 = 0C;
1 = 1;
十进制 十六进制
2个CHAR=1个INT
所以你只是输出了C[2]里的所有数据.

第一个答案是错的。共用休变量所占的内存长度等于最长的成员的长度。所以X占内存是4字节才对。
第二个答案是对的。原因是共用体是将几种不同类型的变量存放到同一段内存单元中,也就是它们都从同一地址开始存放.当X。C[0]、X。[1]赋值后,X.[1]是高字节(0000 0001),X.[0]是低字节(0000 1100).所以X.I的地址是(0000 0001 0000 1100),换逄成十进制后就是268.

这是共用体,共用体内的元素占用同一块物理内存,第一个问题中,其内存应该为4个字节,也就是float所占用的内存。
对于第二个,c[0]内容为12,也就是共用体的内存中最低一个字节为12,c[1]的值为第二个字节的值,为1,则内存中最低两个字节实际上为0000 0001 000