| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 818 人关注过本帖
标题:union中的问题?
只看楼主 加入收藏
过五矿
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2015-10-29
结帖率:57.14%
收藏
已结贴  问题点数:18 回复次数:4 
union中的问题?
#include<stdio.h>
union pw
{
    int i;
    char ch[2];
}a;

int main()
{
    a.ch[0]=13;
    a.ch[1]=2;
    printf("%d\n",a.i);
    return 0;
}
这i是怎么算呀?
a.ch=0,i为1;
a.ch=1,i为269;
搜索更多相关主题的帖子: return 
2015-12-12 21:24
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:5 
你那个i没有赋值啊

一片落叶掉进了回忆的流年。
2015-12-13 10:38
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:5 
int i 有4个字节,仅仅给低两位赋值,还不能确定i的实际值,不过由于你定义的a在静态变量区,会自动初始化为0,所以你的i值应该是2*256+13=525。
整形数据在内存中的存放顺序是低位在前,高位在后,所以知道一个int各字节数值,则计算该int的实际数值的算法是:a[0]+a[1]*256+a[2]*256*256+a[3]*256*256*256

[此贴子已经被作者于2015-12-13 11:51编辑过]


能编个毛线衣吗?
2015-12-13 11:47
ms268el8
Rank: 4
等 级:业余侠客
威 望:1
帖 子:84
专家分:299
注 册:2015-11-30
收藏
得分:5 
聯合結構體union裡的項目會共用同一記憶體空間
我測試你的程序得出結果是525
a.ch[0]=13;
a.ch[1]=2;
所以記憶體目前狀況是:[0000 0000]  [0000 0000]  [0000 0010](這是a.ch[1]佔用空間) [0000 1101](這是a.ch[0]佔用空間)
所以i=525

而你前面說a.ch=1,i为269; 我估計你是說a.ch[0]=13, a.ch[1]=1
所以記憶體目前狀況是:[0000 0000] [0000 0000] [0000 0001](這是a.ch[1]佔用空間) [0000 1101](這是a.ch[0]佔用空間)
所以i=269
2015-12-13 12:04
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:5 
這種問題居然漏過沒鎖

授人以渔,不授人以鱼。
2015-12-13 18:31
快速回复:union中的问题?
数据加载中...
 
   



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

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