C语言的联合体问题

#include<stdio.h>voidmain(){union{inti;struct{charfirst;charsecond;}half;}number;numb... #include <stdio.h>
void main()
{
union
{
int i;
struct
{
char first;
char second;
}half;
}number;
number.i=0x4241;
printf("%c%c\n", number.half.first, number.half.second);
number.half.first='a';
number.half.second='b';
printf("%x\n", number.i);
}

输出结果为:
AB
6261
怎么得来的,想要知道过程解析!拜托各位大侠们了!!!
展开
 我来答
百度网友34a7d2d
推荐于2017-09-22 · 超过17用户采纳过TA的回答
知道答主
回答量:32
采纳率:0%
帮助的人:52.7万
展开全部
union
{
int i;
struct
{
char first;
char second;
}half;
}number;
这里面相当于两个元素,一个元素int 占四个字节(早期是两个字节)
一个元素是结构体类型的占有两个字节其中低八位是char first 高八位为char second;
这两个元素公用一段内存空间,当你把i = 0x4241的时候i的内存表示形式为0x4241高八位为0x42而低八位为0x41而正好大写字母A的ascall 值为0x41 而B为0x42
后面的也就类似这样解释。
楼主你其实可以把上面的
number.half.first='a';
number.half.second='b';试着只用一行语句而不两行同时使用的结果。
比如把上面number.half.first='a'; 注释掉,结果就变成了高八位为0x62 而低八位还是0x41
所以结果输出就会改变为6241
heside123
2011-06-09 · TA获得超过199个赞
知道小有建树答主
回答量:693
采纳率:0%
帮助的人:378万
展开全部
联合体,就是其中的成员公用一段内存。内存的大小由最大的那个成员的大小觉得。
所以你定义的number的大小就是四个字节。

而你使用的时候,后面的操作就会将前面的值覆盖掉。
所以你之前的0x4241就被后面的'a'和'b'覆盖掉了。

内存中是以栈的方式分配的,所以打印出来就是反的。(‘a' 的16进制就是61,'b'是62)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tattackor
推荐于2017-10-11 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:940万
展开全部
1、联合体又被称为共用体,从某个角度来说,共用体名字更合理。和结构体同属于C语言数据类型中的结构类型。
2、例如
uniuon data{ int i ; char c ;float f;}x;定义共用体类型名称为data类型,有三个属性,分别为
int i ; char c ;float f;这三个属性共同占用内存空间,所以空间占用选属性中占用最多的那个,也就是float f。占用四个字节。由于共同占用,所以在同一时间只能保留一个属性内容
如果为
struct data{ int i ; char c ;float f;}x;则表明定义结构体类型名称为data类型,也是三个属性,不过在内存中占用的是空间大小是三个属性之和。若int类型在编译器中分配4字节的话,总共分配字节数位4+1+4总共9字节。
由于单独占用,所以在同一时间可以保留所有属性内容
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wyujack
2011-06-09 · TA获得超过223个赞
知道小有建树答主
回答量:303
采纳率:0%
帮助的人:184万
展开全部
1) A B 的 ASCII码 分别为 65 , 65
十六进制 就是 0X41 0X42
类似 a b 分别是 97 98 十六进制 0X61 0X62
AB ->0X4142
2) union 取其中类型所占空间最大的类型的空间大小
sizeof(number)=sizeof(int)=4 (32位机器)
存储 先 first 后 second ,输出 是 先second 后 first
这里要看看 数据在机器中的表示形式了
你自己再看看,我知道的就是这样了,不知道你明白了不?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
哇噻美女
2011-06-09 · TA获得超过450个赞
知道小有建树答主
回答量:155
采纳率:0%
帮助的人:175万
展开全部
联合体内的元素共用内存,联合体变量的大小为联合体元素中最大的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式