标题:求大神解释下关于共用体的一个疑惑
只看楼主
johnleelpf
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-10-25
结帖率:0
已结贴  问题点数:20 回复次数:5 
求大神解释下关于共用体的一个疑惑
#include "stdafx.h"
#include <iostream>
using namespace std;
union datatype
{
    double a;
    int    b;
}x,y;
void main()
{
    x.a=8;
    x.b=4;
    y.b=4;
    y.a=8;
    cout<<"x.a="<<x.a<<"  "<<"x.b="<<x.b<<endl;
    cout<<"y.a="<<y.a<<"  "<<"y.b="<<y.b<<endl;
    cout<<"the size of union is:"<<sizeof(datatype)<<endl;
    cout<<"the size of a is:"<<sizeof(double)<<endl;
    cout<<"the size of b is:"<<sizeof(int)<<endl;
    system("pause");
}

运行结果为:
    x.a=8  x.b=4
    y.a=8  y.b=0
the size of union is:8
the size of a is:8
the size of b is:4
看书上讲共用体在使用时,始终是最新的赋值冲刷掉前面的赋值,以最大的数据类型为其共用体大小。我自己验证了下,发现不同的赋值顺序会直接影响到最后数据是否被冲刷掉。就像上面x共用体,在先给double型的a赋值为8,再给int型的b赋值为4,按照书中所讲,最后整个共用体以后放的4为准,那里面就只有int的8,但实际输出时a仍然有值,并未被刷掉。这是为什么???
而在将两个类型的数据换顺序存放后,先放的int型4被后来的double型8冲刷掉,读取int型的b时只读取到double型a的前部分,显示为0.
搜索更多相关主题的帖子: include system double 
2013-10-25 22:53
Osiris9
Rank: 4
来 自:九柱
等 级:业余侠客
帖 子:28
专家分:225
注 册:2013-10-25
得分:7 
你理解错误...!不关结构体大小的事

干旱时死去................丰水时重生!
2013-10-26 01:28
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
得分:7 
把内存的数据按照字节打出来看看就清楚了

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2013-10-26 20:33
yss28
Rank: 2
等 级:论坛游民
帖 子:16
专家分:76
注 册:2013-3-16
得分:7 
共用体的大小 = 其中最大项的大小。不会变来变去的
2013-11-01 21:37
johnleelpf
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-10-25
得分:0 
回复 2楼 Osiris9
我理解错误的话,那该如何理解,请指教~
2013-11-02 16:20
johnleelpf
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-10-25
得分:0 
回复 4楼 yss28
呵呵,我纠结的不是共用体的大小,而是结构体中数据冲刷的问题
2013-11-02 16:22



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-422532-1-1.html




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

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