| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1521 人关注过本帖, 1 人收藏
标题:共用体的问题
只看楼主 加入收藏
蓝天依笑
Rank: 2
等 级:论坛游民
帖 子:47
专家分:58
注 册:2010-4-16
结帖率:100%
收藏(1)
 问题点数:0 回复次数:11 
共用体的问题
#include<stdio.h>
union ss
{short int i;
 char c[2];
};
void main()
{union ss x;
    x.c[0]=10;
    x.c[1]=1;
    pirntf("%d",x.i);
}
这个答案为什么是266?
搜索更多相关主题的帖子: 答案 
2010-04-22 22:00
南国利剑
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:29
帖 子:1165
专家分:3536
注 册:2010-4-12
收藏
得分:0 
你并未对i进行初始化,却输出266,
那可能是你所申请到得内存空间中,原来就保存着266,
所以,输出266.

希望有高人有更好的解释。
期待中

南国利剑
2010-04-22 22:17
qq8801103
Rank: 5Rank: 5
来 自:苏州中科大软件学院
等 级:职业侠客
威 望:1
帖 子:422
专家分:340
注 册:2009-10-8
收藏
得分:0 
这个共用体的空间大小为2 ,而i和c共用这2个空间,而结果是266可能是输出的是把字符10和1转成整型

Discuz!  
好好学习  天天向上
2010-04-22 22:32
望乡潭
Rank: 1
等 级:新手上路
帖 子:12
专家分:8
注 册:2010-2-22
收藏
得分:0 
没有初始化,数据可能是随机的
2010-04-22 22:42
qq8801103
Rank: 5Rank: 5
来 自:苏州中科大软件学院
等 级:职业侠客
威 望:1
帖 子:422
专家分:340
注 册:2009-10-8
收藏
得分:0 
应该是265,因为x.c[1]=0x01,x.c[0]=0x09,因为普通的pc机是小端模式,所以union的两个字节里存放的数据是0x0109,因为x.c和x.i占据相同的内存,所以以short int的形式访问就是265

Discuz!  
好好学习  天天向上
2010-04-22 22:52
明王朝
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:58
专家分:196
注 册:2009-11-3
收藏
得分:0 
不懂,研究研究……
2010-04-22 23:08
南国利剑
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:29
帖 子:1165
专家分:3536
注 册:2010-4-12
收藏
得分:0 
调试发现,输出的值与自字符数组的值有关,如果改变那两个元素的值,
输出的值也会发生相应的改变。


南国利剑
2010-04-22 23:30
NOMIPS
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:86
专家分:537
注 册:2010-3-31
收藏
得分:0 

对于你定义的共同体
union ss
{short int i;
char c[2];
};

i与数组c共同占有一块4个字节的地址空间
而c[0]=10=00001010b,c[1]=1=00000001b,
在小端模式下(little endian)
            地址方向高<-------------低
            |地址3||地址2||地址1||地址0|
c[] :          0      0      c[1]   c[0]
 i  :          0      0    00000001 00001010

i的值相当于0*256^3(3次方)+0*256^2(2次方)+ 1*256^1(1次方)+10*256^0(0次方)=266;



 


 

 
 
2010-04-22 23:54
明王朝
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:58
专家分:196
注 册:2009-11-3
收藏
得分:0 
个人觉得LS说的很对!!!i与数组c共同占有一块4个字节的地址空间……
关于大端模式和小端模式LZ可参考下面这篇文章:
http://www.
2010-04-24 07:41
ballofpan
Rank: 1
等 级:新手上路
帖 子:8
专家分:5
注 册:2009-8-12
收藏
得分:0 
8楼的太复杂了吧。
  short int 是两个字节的。
    即没有|地址3|地址2|
c1 -> 00000001
c2 -> 00001010
i -> 0000000100001010 二进制转换成十进制即为:266
2010-04-24 09:10
快速回复:共用体的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.043014 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved