鱼C论坛

 找回密码
 立即注册
查看: 2289|回复: 2

共用体

[复制链接]
发表于 2022-10-9 19:33:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
[img]%5Burl=https://imgse.com/i/xYiQmR%5D

                               
登录/注册后可看大图
[/url][/img]
为什么a,b是跟x共用的一个内存,而不是跟y共用的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-10-10 09:09:00 | 显示全部楼层
本帖最后由 jackz007 于 2022-10-10 21:26 编辑

        因为 in 和 a、b 共享内存,而在 in 中,x 靠前,占前 4 个字节,y 靠后,占后 4 个字节,而 e 的另两个成员 a 和 b 占用的也同样是 4 个字节,所以,e . a 和 e . b 以及 e . in . x 实际上构成了共享关系。

        关于共用体 e 有以下几点需要明确:

1、e 中共有 3 个成员 in、a、b 共同分享内存,也就是说,这 3 个变量共享同一块内存,但是,in 是结构体,共有 2 个成员(x ,y),都是 int 型,而另外 2 个联合成员 a 和 b 也是 int 型,所以,in 、a、b 的内存共享实际上是 e . in . x、a、b 的内存共享,也就是说,这三个变量实质上就是同一个变量,而且,它们的类型相同,都是 int 型,所以,任何时候都有 e . in . x == e . a == e . b ;

2、在联合 e 的 3 个成员 in 、a、b 中,in 占用了 8 个字节,a 和 b 都是 4 个字节,所以,in 决定了整个共用体的占用空间。

3、既然 e . in . x、e . a、e . b 共享占用了联合体 e 的前 4 个字节,那么,毫无疑问,e . in . y 就 "独占" 了联合体 e 的后 4 个字节,之所以说 "独占",是因为与其它的成员不存在任何关联。
#include <stdio.h>

int main(void)
{
        union EXAMPLE {
                struct {
                        int x                         ;
                        int y                         ;
                } in                                  ;
                int a                                 ;
                int b                                 ;
        } e                                           ;
        e . a = 1                                     ; // e . in . x = e . a = e . b = 1
        e . b = 2                                     ; // e . in . x = e . a = e . b = 2
        e . in . x = e . a * e . b                    ; // e . in . x = e . a * e . b = 2 * 2 = 4
        e . in . y = e . a + e . b                    ; // e . in . y = e . a + e . b = 4 + 4 = 8 
        printf("%d , %d\n" , e . in . x , e . in . y) ; // 打印输出 4 , 8
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-10-11 10:41:26 From FishC Mobile | 显示全部楼层
看了以上打印结果,
是不是可以理解为
e.a
e.b
实际上就是同一个数?无论对a还是b赋一个值,另外一个,就变成一样的数?

没有看此贴之前,个人的理解是a,b是各自的值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-8 01:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表