|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- #include <stdio.h>
- main ()
- {
- union A
- {
- struct
- {
- int x;
- int y;
- }in;
- int a;
- int b;
- }e;
- e.a=1;
- e.b=2;
- e.in.x=e.a*e.b;
- e.in.y=e.a+e.b;
- printf("%d %d",e.in.x,e.in.y);
- }
复制代码
这样的一段代码,输出结果为4,8;想问下8是怎么来的,e.a和e.b不都是2吗
本帖最后由 jackz007 于 2020-3-23 17:56 编辑
在这个共用体 e 中,一共有 3 个元素,e . in、e . a、e . b,既然是共用体,那么,这 3 个元素实际上是指向同一个内存地址的。3 个元素中,比较特殊的是 e . in,它是一个结构,这个结构含有 2 个 int 成员,实际上可以视为一个有 2 个元素的一维整型数组,这样的话,共用体 e 指向相同地址的 3 个元素分别是 e . in . x、e . a、e . b,就是说,这 3 个元素实际上是拥有三个不同标识符的同一个整型数,关于这一点,通过下面的代码很容易看出效果:
- #include <stdio.h>
- main ()
- {
- union A
- {
- struct
- {
- int x ;
- int y ;
- } in ;
- int a ;
- int b ;
- } e ;
- e . a = 1234 ;
- printf("e . in . x = %d\n" , e . in . x) ;
- printf("e . in . y = %d\n" , e . in . y) ;
- printf("e . a = %d\n" , e . a) ;
- printf("e . b = %d\n" , e . b) ;
- e . in . x = 5678 ;
- printf("e . in . x = %d\n" , e . in . x) ;
- printf("e . in . y = %d\n" , e . in . y) ;
- printf("e . a = %d\n" , e . a) ;
- printf("e . b = %d\n" , e . b) ;
- }
复制代码
编译、运行实况
- C:\Bin>g++ -o x x.c
- C:\Bin>x
- e . in . x = 1234
- e . in . y = 40099964
- e . a = 1234
- e . b = 1234
- e . in . x = 5678
- e . in . y = 40099964
- e . a = 5678
- e . b = 5678
- C:\Bin>
复制代码
|
|