共用体union

简介: 共用体union

union共用体名

{

  类型名 成员名1;

  类型名 成员名2;

  ……

  类型名 成员名n;

}

  由于各个成员变量在内存中都使用同一段存储空间,因此共用体变量的长度等于最长的成员长度,共用体的访问方式和结构体类似。

  下面是一个用共用体的程序,推断一下这个程序的输出是什么:

 1 #include <stdio.h>
 2 
 3 int main()
 4 {
 5     union key{
 6         int k;
 7         char ch[2];
 8     }u;
 9     
10     u.k = 258;
11     printf("%d %d\n", u.ch[0], u.ch[1]);  
12     return 0;
13 }

正确的输出是:1456655-20180927204638260-831184638.png,你做对了吗?

一开始我以为输出结果是: 1  2,因为258的二进制表示为:0000 0001 0000 0010,这两个字节分别为1 和 2

后来我又认为答案是:0 0, 因为258完整的4字节二进制表示是:0000 0000 0000 0000 0000 0001 0000 0010前两个字节值为0,这里的错误就是ch应该是从低字节开始存的,所以占用的应该是int的两个低字节空间,但是前面的把258的4字节完整展开的形式就让我误以为这就是258在内存中的存储形式,认为前面两个字节就是低字节,从而误以为ch是占用的是前面两个值为0的字节,但是,但是这种展开式其实是高字节在前,低字节在后,所以258在内存中实际的存储形式是1456655-20180927210736931-141871259.png所以低字节是02 和01,所以ch[0] 应该等于02, ch[1] 应该等于01,于是得到了这样的输出。

 

相关文章
|
6月前
Union和Union All到底有什么区别
Union和Union All到底有什么区别
143 1
|
7月前
|
存储 数据管理 程序员
C++一分钟之-结构体与联合体(Union)
【6月更文挑战第20天】在C++中,结构体(struct)用于组合多种数据类型形成复合类型,成员变量占用独立内存,适合存储不同类型且同时有效的数据。联合体(union)则让所有成员共享同一内存,适合节省空间和进行低级别类型转换,但需小心数据覆盖。通过`struct`和`union`,程序员能构建更灵活的代码,但也需留意内存对齐和数据管理等问题。
105 2
|
8月前
|
编译器 C++
内存对齐与内存开辟。结构体(struct),位段,枚举类型(enum),联合体(union)。
内存对齐与内存开辟。结构体(struct),位段,枚举类型(enum),联合体(union)
47 1
|
8月前
|
存储 C++
共用体(Union)类型详解
共用体(Union)类型详解
236 0
|
8月前
|
存储 C++
引用共用体(Union)变量的方法
引用共用体(Union)变量的方法
68 0
|
8月前
|
存储 安全 编译器
C语言中的共用体(Union)技术详解
C语言中的共用体(Union)技术详解
183 0
|
C语言
c语言基础题-共用体union的用法
c语言基础题-共用体union的用法
114 0
|
存储 C语言
【C语言】联合体-共用体 (union) 详解
【C语言】联合体-共用体 (union) 详解
662 0
union和union all 的区别
union和union all 的区别
261 0
|
存储 编译器 C语言
C++指针与其它复合类型
C++指针与其它复合类型