返回信息流union类型是共享内存的,以size最大的结构作为自己的大小,这样的话,myun这个结构就包含u这个结构体,而大小也等于u这个结构体的大小,在内存中的排列为声明的顺序x,y,z从低到高,然后赋值的时候,在内存中,就是x的位置放置4,y的位置放置5,z的位置放置6,现在对k赋值,对k的赋值因为是union,要共享内存,所以从union的首地址开始放置,首地址开始的位置其实是x的位置,这样原来内存中x的位置就被k所赋的值代替了,就变为0了,这个时候要进行打印,就直接看内存里就行了,x的位置也就是k的位置是0,而y,z的位置的值没有改变,所以应该是0,5,6
这段话的意思不是只有三个内存的位置吗,就相当数组里面只有三个格,那怎么还能存下k的值呢?
其实我也觉得自己说的有点乱。。。。。。
这是一条镜像帖。来源:北邮人论坛 / cpp / #23894同步于 2009/5/18
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
Re: 关于联合
kobe6672823
2009/5/18镜像同步1 回复
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复
重要的不是可以存几个值,而是编译器会怎样存取这些值,当你写了a.u.x的时候编译器就会以int的大小取存取开头的内存,写了a.k的时候也是这样;
后面的float和int的联合类似;
编译器不管数据是否是你想象中的“有效”,只管按代码转化内存存取的指令
【 在 kobe6672823 的大作中提到: 】
: union类型是共享内存的,以size最大的结构作为自己的大小,这样的话,myun这个结构就包含u这个结构体,而大小也等于u这个结构体的大小,在内存中的排列为声明的顺序x,y,z从低到高,然后赋值的时候,在内存中,就是x的位置放置4,y的位置放置5,z的位置放置6,现在对k赋值,对k的赋值因为是union,要共享内存,所以从union的首地址开始放置,首地址开始的位置其实是x的位置,这样原来内存中x的位置就被k所赋的值代替了,就变为0了,这个时候要进行打印,就直接看内存里就行了,x的位置也就是k的位置是0,而y,z的位置的值没有改变,所以应: 该是0,5,6
: 这段话的意思不是只有三个内存的位置吗,就相当数组里面只有三个格,那怎么还能存下k的值呢?
: ...................