幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2579|回复: 6

[通用编程] 共用体的问题

[复制链接]

313

主题

1574

帖子

1万

积分

⑧专业

*永恒国度*

积分
14145
QQ
发表于 2007-5-20 16:11:47 | 显示全部楼层 |阅读模式
程序如下:
main()
{
    union int_char
    {
       int i;
       char ch[2];
     }x;
    x.i=24897;
    printf("i=%o\n",x.i);
    printf("ch0=%o,ch1=%o\n ch0=%c,ch1=%c\n", x.ch[0],x.ch[1],x.ch[0], x.ch[1]);
}

结果为:
i=60501
ch0=101,ch1=141
ch0=A,ch1=a

但共用体只能存放一个值,虽然下面的调用都是用到,24897这个值,但这值只是赋给 i ,
为什么可以用 x.ch[X] 把这个值调用出来呢?    不懂,不懂 [s:6]  [s:6]  [s:6]
[img][/img] http://shop33698673.taobao.com被别人嫉妒,证明你优秀,嫉妒别人说明你无能
回复

使用道具 举报

20

主题

197

帖子

2641

积分

⑥精研

积分
2641
QQ
发表于 2007-5-20 17:56:08 | 显示全部楼层
换成二进制就清楚了,首先要理解联合的意思,联合是一个内存块中放多个变量类型.
在你的联合当中,我们可以看出该内存共16bit
而I的值为:
110000101000001(B)
根据ASM中的存储规范,低位的要在低位址中,因此保存顺序是01000001 01100001,因此在调用char模块时,由于数组地址指向了该联合的头地址,因此在ch0中因该是01000001,ch1中是01100001
签名要少于60,SO,i haven't upload my pic
回复 支持 反对

使用道具 举报

7

主题

190

帖子

1766

积分

⑥精研

....

积分
1766
发表于 2007-5-20 22:56:30 | 显示全部楼层
回答的够细致. 赞个[s:2]
萝卜啊,白菜啊,土豆星啊,梦想有爱啊。
回复 支持 反对

使用道具 举报

19

主题

842

帖子

1万

积分

⑧专业

絕望青年,一起增高吧

积分
13676
发表于 2007-5-21 03:50:17 | 显示全部楼层
其實union某較少用,該說不多機會使用吧

為著彼岸,便要與之妥協 但為著彼岸,更不能與之妥協

回复 支持 反对

使用道具 举报

7

主题

190

帖子

1766

积分

⑥精研

....

积分
1766
发表于 2007-5-21 16:52:11 | 显示全部楼层
在联合中,优先开辟最大长度元素内存.并且以求整倍为要求,
上面那个联合里,最大长度的应该是int类型,占4字节,应该是32位吧. [s:3]
萝卜啊,白菜啊,土豆星啊,梦想有爱啊。
回复 支持 反对

使用道具 举报

20

主题

197

帖子

2641

积分

⑥精研

积分
2641
QQ
发表于 2007-5-21 18:02:21 | 显示全部楼层
楼上的没看来吗?August很喜欢复古dance的人哈,他一直都在用TC......
签名要少于60,SO,i haven't upload my pic
回复 支持 反对

使用道具 举报

7

主题

190

帖子

1766

积分

⑥精研

....

积分
1766
发表于 2007-5-21 20:53:46 | 显示全部楼层
- -看完另外那帖才发现...呵呵 [s:5]
萝卜啊,白菜啊,土豆星啊,梦想有爱啊。
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2024-4-27 21:29 , Processed in 0.027408 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表