c语言 共用体的问题

[复制链接]
查看11 | 回复3 | 2012-4-19 00:14:55 | 显示全部楼层 |阅读模式
首先:公用体和结构体最大的不同就是公用内存。接着看你的程序:你定义的short整型变量x,我们知道它的长度是2字节,char ch 长度也是2字节,我们知道了它们公用一段长度为2字节的内存定义u.x=100,它的十六进制表示为64H, 在内存中的编码为:00000110 00000100定义字符数组u.ch[0]=‘a',u.ch[1]=0; 由于共用内存,所以字符a就把前面的内存覆盖了,a的ASCII码为97,转化为十六进制为61,你的输出格式是%x,以十六进制输出,便为61。PS:printf写错了...
回复

使用道具 举报

千问 | 2012-4-19 00:14:55 | 显示全部楼层
你定义的共用体中,x和ch[2]占用相同的存储空间,则x的低字节正好和ch数组的第一个元素相同,高字节正好和ch数组的第二个元素相同。内存中存储的状况是这样的:u.x=100 时候,存储为 0x64 0x00此时,ch[0]=0x64, ch[1]=0x00u.ch[0]='a';u.ch[1]=0时候,'a'值为0x61,存储为 0x61 ...
回复

使用道具 举报

千问 | 2012-4-19 00:14:55 | 显示全部楼层
共用体是成员变量共同占用一块内存空间,这里的话不考虑字节对齐是占两个字节。u.x=100这个赋值语句是将这两个字节的空间中存入100这个数,但是后面继续在为它赋值,u.ch[0]='a';
u.ch[1]=0;也就是这两个字节的空间中,低的一个字节你赋值为97(a的ASCII值为97),高的一个字节你赋值为0,所以赋值完成后这两个字节的空间中的值就...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行