标题:得出答案,给出为什么?
只看楼主
longfeng867
Rank: 1
来 自:重庆
等 级:新手上路
威 望:1
帖 子:182
专家分:0
注 册:2007-5-20
 问题点数:0 回复次数:10 
得出答案,给出为什么?
union a {
 int a_int1;
 double a_double;
 int a_int2;
};

typedef struct
{
 a a1;
 char y;
} b;

class c
{
 double c_double;
 b b1;
 a a2;
};
int main()
{
    cout << "b=" << sizeof(b)<<endl;
    cout << "c=" << sizeof(c)<<endl;
    return 0;
}
搜索更多相关主题的帖子: double int union main char 
2008-01-14 16:49
kkqq
Rank: 1
等 级:新手上路
帖 子:77
专家分:0
注 册:2008-2-15
得分:0 

    b=16
    c=32

问题出在b上~~~~估计是union和struct语法起冲突~~(说不定是个BUG)
可能是这样struct必须开辟所有字节算~~所以本来b要开8+4+4+1=17
然而union又定义为共用所1就并入到4+4中~~这样就等于是开了8给1用~~~所以b=8+4+4=16

随便说一下~~在b实验会倒置~~VC运行死机~~ ~~有危险~~~
2008-02-18 02:46
s0h0j0
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2008-1-26
得分:0 
楼上说的不太对吧,共用体的长度等于共用体中长度最大的变量的长度,所以次共用体的长度为8,结构体的长度等于结构体中所有成员变量长度的和,因此b为8+1=9;
2008-02-18 12:52
永夜的极光
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:2721
专家分:1
注 册:2007-10-9
得分:0 
大约是结构体内存对齐的原因,我对这个也不懂,猜的

从BFS(Breadth First Study)到DFS(Depth First Study)
2008-02-18 15:34
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
得分:0 
不知道为什么了.......
#include<iostream.h>
union  a
{
int a_int1;
double a_double;
int a_int2;
};
 typedef struct bb
{
    union a a1;
    char y;
}b;

class c
{
double c_double;
b b1;
union a a2;
};
int main()
{    c  c1;
    cout << "int=" << sizeof(int)<<endl;
    cout << "double=" << sizeof(double)<<endl;
    cout << "char=" << sizeof(char)<<endl;
    cout << "a=" << sizeof(union a)<<endl;
    cout << "b=" << sizeof(b)<<"="<<sizeof(a)+sizeof(char)<<endl;
    cout << "c=" << sizeof(c)<<"="<<sizeof(double)+sizeof(a1)+sizeof(b)<<endl;
    return 0;
}
2008-02-18 16:37
flyue
Rank: 10Rank: 10Rank: 10
来 自:江南西道
等 级:贵宾
威 望:19
帖 子:3465
专家分:1563
注 册:2006-6-20
得分:0 
代码前面加上:
#include <iostream>
using namespace std;

天之道,损有余而补不足.人之道则不然,损不足以奉有余.孰能有余以奉天下,唯有道者.
2008-02-19 14:19
Arcticanimal
Rank: 3Rank: 3
等 级:论坛游民
威 望:7
帖 子:341
专家分:20
注 册:2007-3-17
得分:0 
似乎是个很有意思的问题  double 和 int 放在一起的union 还真没试过
可惜手头一个编译器都没有, 可以用不同的编译器编译看看结果是不是一样的

try new catch
2008-02-19 20:46
kkqq
Rank: 1
等 级:新手上路
帖 子:77
专家分:0
注 册:2008-2-15
得分:0 
[bo]以下是引用 [un]s0h0j0[/un] 在 2008-2-18 12:52 的发言:[/bo]

楼上说的不太对吧,共用体的长度等于共用体中长度最大的变量的长度,所以次共用体的长度为8,结构体的长度等于结构体中所有成员变量长度的和,因此b为8+1=9; ...


你运行看看就知道了~~虽然按语法来说~~确实是b=8+1=9   但运行后b=16~~ 我的确实是这样~(所以我才说会不会是个BUG)
当然我有试过sizeof(double)确实为8~~也觉得挺奇怪的`````
2008-02-19 20:53
longfeng867
Rank: 1
来 自:重庆
等 级:新手上路
威 望:1
帖 子:182
专家分:0
注 册:2007-5-20
得分:0 

在这个连处女膜都可以伪造的世界里,还有什么值得我相信!
2008-04-23 17:59
bestcln
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2007-9-11
得分:0 
不知道
2008-04-23 18:46



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




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

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