联合数据存储的工作方式。输出混乱

时间:2019-06-26 09:38:28

标签: c union

我不明白Union如何打印数据。

#include<stdio.h>
int main(){
 union Values{
  int a;
  char b;
  int c;
 };
union Values val;
val.a = 1;
val.b= 2 ;
val.c = 300;
printf("%d,%d,%d",val.a,val.b,val.c);
return 0;
}

我的输出达到300,44,300

1 个答案:

答案 0 :(得分:2)

Values是大小为int的联合类型,这是其成员的最大大小。

那么考虑int的大小是4个字节。

                   +------------+-------------+-------------+-------------+
union Values val = |  1st byte  | 2nd byte    | 3rd byte    |  4th byte   |
                   +------------+-------------+-------------+-------------+

存储时

val.c = 300; //binary 0b100101100

val将成为

        +------------+-------------+-------------+-------------+
  val = | 0010 1100  | 0000 0001   |             |             |
        +------------+-------------+-------------+-------------+

访问val.b时,您将只读取包含0010 1100的一个字节。 而0010 1100的十进制等效值为44