主题:整型数组,
abctwiq
[专家分:0] 发布于 2011-11-25 18:28:00
一个整型数组如a[10];
a[0]=1;a[1]=10;
在内存中存储应该是连续的吧,那么在a[0]与a[1]之间有没有什么特别的东西表示a[0]结束a[1]开始??
比如:union aa{int a[10],long b}u;
令u.a[0]=1;u.a[1]=10;
在输出u.b的时候会输出1但不会有10;为什么会这样呢。。
回复列表 (共5个回复)
沙发
abctwiq [专家分:0] 发布于 2011-11-25 18:35:00
补充一个问题,如果在共同体内还有一个float t;那么在输入u.a[0]=1;u.a[1]=10;后再输出t为什么会为0.0000000?而b会为1 ???
板凳
argentmoon [专家分:13260] 发布于 2011-11-25 23:15:00
union表示这几个变量共同使用这一段内存
long和float表示用两种类型去解读这一段内存,long型的解读为1,因为一般情况下long和int等长,第一个元素就是1,float型为0,这个我也没仔细去算,不过介意你去学习一下浮点数在内存中表示的形式
3 楼
idealguy [专家分:110] 发布于 2011-11-28 01:07:00
通常不在整型和浮点之间做Union,
除非你是要利用这个技巧来解析浮点内部构造
4 楼
bmfw [专家分:30] 发布于 2011-12-05 20:38:00
这里所谓的共享是指该联合变量可被赋予任一成员值,但每次只能赋一种值, 赋入新值则冲去旧值
5 楼
abctwiq [专家分:0] 发布于 2011-12-16 11:33:00
问题是,如果旧值被冲去的话,为什么输出b的时候会是1呢,,我只是给a[1]赋值了啊。
我来回复