|
网站首页
|
业界新闻
|
小组
|
威客
|
人才
|
下载频道
|
博客
|
代码贴
|
在线编程
|
编程论坛
|
登录
注册
短消息
我发表的主题
我参与的主题
我收藏的贴子
我上传的附件
我下过的附件
编辑个人资料
我的博客
用户控制面板
搜索
道具
恢复默认风格
碧海青天
秋意盎然
棕红预览
粉色回忆
蓝雅绿
紫色淡雅
青青河草
e点小镇
橘子红了
红红夜思
水晶紫色
雪花飘飘
新年快乐
风格
短消息
论坛展区
帮助
编程论坛
→
开发语言
→
『 C语言论坛 』
→ 共用体成员输出问题,结果怎么是13??我怎么也想不明白
我的收件箱(0)
欢迎加入我们,一同切磋技术
用户名:
密 码:
共有
1110
人关注过本帖
标题:
共用体成员输出问题,结果怎么是13??我怎么也想不明白
只看楼主
加入收藏
粉jj
等 级:
论坛游民
威 望:
1
帖 子:123
专家分:82
注 册:2011-3-8
结帖率:
85.11%
楼主
收藏
问题点数:0 回复次数:5
共用体成员输出问题,结果怎么是13??我怎么也想不明白
共用体不是最后赋值的成员才是有效存放的嘛?怎么输出是13呢??
#include<stdio.h>
union pw
{int i;char ch[2];}a;
main()
{a.ch[0]=13;a.ch[1]=0;printf("%d\n",a.i);}
[
本帖最后由 粉jj 于 2011-12-13 11:55 编辑
]
2011-12-13 11:05
举报帖子
使用道具
赠送鲜花
半个灵魂
等 级:
论坛游民
帖 子:13
专家分:11
注 册:2011-11-17
第
2
楼
收藏
得分:0
有效存放的是整个数组里面的所有成员,ch[0]的起始地址和 i 相同,所以 a.i=13而不是0.
2011-12-13 12:34
举报帖子
使用道具
赠送鲜花
共和国鹰派
来 自:山东
等 级:
论坛游侠
帖 子:37
专家分:119
注 册:2011-10-20
第
3
楼
收藏
得分:0
因为char[2]是这个UNion中的一员,当你输入a.ch[0]=13;a.ch[1]=0;实际上此时这个联合体内存储的是一个char型的字符串,而一个char型字符串是无法转换为Int数据的,所以取得了第一个char元素转换为int型输出了
2011-12-13 17:28
举报帖子
使用道具
赠送鲜花
张敏樱木花道
等 级:
论坛游侠
帖 子:139
专家分:137
注 册:2011-3-26
第
4
楼
收藏
得分:0
数据都在内存中,只是显示的长度不同而已,如果你有内存模型的概念这个问题就很好理解了!
另外对于3楼的“char型字符串是无法转换为Int数据的,所以取得了第一个char元素转换为int型输出了”持怀疑的态度,我觉得如果让ch[1]!=0,那么三楼的预计结果也是13。由于环境问题没有办法验证,希望那位朋友告诉以下结果
2011-12-13 18:00
举报帖子
使用道具
赠送鲜花
a771270076
等 级:
论坛游民
帖 子:5
专家分:23
注 册:2011-12-9
第
5
楼
收藏
得分:0
共用体最大的特点就是共占一块内存,就来在TC环境下来说,你的这个共用体占2个字节
ch[0]=13作为一个字符类型当然是占一个字节,在内存中的:0000 1101
ch[1] 在内存中:0000 0000
你输出的是int 类型的,在TC中占2个字节,所以其值为 0000 0000 0000 1101(2)
结果当然是13
2011-12-13 19:03
举报帖子
使用道具
赠送鲜花
luchar
来 自:南京
等 级:
蜘蛛侠
帖 子:279
专家分:1263
注 册:2011-11-3
第
6
楼
收藏
得分:0
因为共用体是不同的存储类型用相同的内存区间,当然这些区间只能存储一类数据,就拿这里来说;
分配了一个16个二进制位的内存单元给a,则int i和char ch[2]共同用这些单元
这个要看编译器处理内存的方式了,在vc6下面,如果把;a.ch[1]=1,则得到结果是269。
把是13转成二进制是0000 1101,而1转成二进制是0000 0001
int型占两个字节,就是16个二进制位,刚好和ch[2]的大小相同,就把这16位完整的使用,成了0000 0001 0000 1101,就是十进制的269,可见他是ch[0]在后面,ch[1]在前面的。
2011-12-13 19:13
举报帖子
使用道具
赠送鲜花
6
1/1页
1
快速回复:
共用体成员输出问题,结果怎么是13??我怎么也想不明白
数据加载中...
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.034188 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved