C-工会数据存储的工作原理.获得令人困惑的输出



我无法理解联合如何打印数据。

#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

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

相关内容

  • 没有找到相关文章

最新更新