联合体的特点

1、联合体是一种结构,在这个结构中能够不同类型的成员,但同一时间仅仅能存放当中的一种。

#include <stdio.h>

union  Demo
{
int a;
char b;
long long c;
}; int main(){
union Demo demo;
demo.a = 10; printf("a=%d\n", demo.a);
printf("b=%d\n", demo.b);
printf("c=%d\n", demo.c);
return 0;
}



2、联合体全部成员的首地址都是一样的(共享同一块内存空间)。

#include <stdio.h>

union  Demo
{
int a;
char b;
long long c;
}; int main(){
printf("%p\n", &demo.a);
printf("%p\n", &demo.b);
printf("%p\n", &demo.c);
return 0;
}

3、联合体所占的内存的长度,一般等于其最大成员的内存长度。

#include <stdio.h>

union  Demo
{
int a;
char b;
long long c;
}; int main(){
union Demo demo;
printf("%d\n", sizeof(demo));
return 0;
}

4、联合体成员的对齐方式要适合全部的成员。

#include <stdio.h>

union  Demo
{
int a;// 4个字节
char b;// 2个字节
long long c;// 8个字节
char d[11];// 11个字节
}; int main(){
union Demo demo;
printf("%d\n", sizeof(demo));
return 0;
}

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd3VzZXl1a3Vp/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">



上面联合体变量demo的大小之所以不是11个字节而是16个字节,是由于这里存在节对齐问题:

11既不能被2整除,也不能被4,、8整除,因此补充字节到16,因此就符合全部成员自身内存对齐了。

这里能够看出联合体所占空间的大小,不仅取决于最大成员的内存大小。并且跟全部成员的数据类型有关系。其大小必须满足两个必须条件:

1、大小足够容纳其最宽的成员。

2、大小能被全部成员类型的大小所整除。

联合体内部指针成员变量

对于联合体来讲最主要的原则是。一次仅仅操作一个成员变量,假设这个变量是指针,那么一定是处理完指针相应的内存之后再来使用其它成员。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd3VzZXl1a3Vp/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

C——联合体(共同体)总结的更多相关文章

  1. 【 转】 C/C++结构体和联合体的区别

    联合体用途:使几个不同类型的变量共占一段内存(相互覆盖) 结构体是一种构造数据类型用途:把不同类型的数据组合成一个整体-------自定义数据类型 总结: 声明一个联合体: union abc { i ...

  2. 编程C语言进阶篇——自定义数据类型:共同体

    什么是"自定义数据类型"?顾名思义,就是用户可以随时在程序中自行定义新的数据类型.自定义数据类型时需要设置数据类型的名称及其成员.数据类型成员各属性的设置方法等同于变量设置时相应属 ...

  3. 联合体(union)的使用方法及其本质

    转自:http://blog.csdn.net/huqinwei987/article/details/23597091 有些基础知识快淡忘了,所以有必要复习一遍,在不借助课本死知识的前提下做些推理判 ...

  4. 联合体union和大小端(big-endian、little-endian)

    1.联合体union的基本特性——和struct的同与不同 union,中文名“联合体.共用体”,在某种程度上类似结构体struct的一种数据结构,共用体(union)和结构体(struct)同样可以 ...

  5. 全面总结sizeof的用法(定义、语法、指针变量、数组、结构体、类、联合体、位域位段)

    一.前言 编译环境是vs2010(32位). <span style="font-size:18px;">#include<iostream> #inclu ...

  6. union联合体使用详解

    1.联合体联合体(union)与结构体(struct)有一些相似之处.但两者有本质上的不同.在结构体中,各成员有各自的内存空间, 一个结构变量的总长度是各成员长度之和.而在联合体中,各成员共享一段内存 ...

  7. (转)C语言union(联合体 共用体)

    一直以来,union都是个很少用到的东西,对于这些不常用的结构往往记不住.这次看书又看到了,还是学习一下吧.一般在Windows API的一些数据结构中才能看到这个union,其实并不复杂.本质上来说 ...

  8. Objective-C中将结构体与联合体封装为NSValue对象

    在Clang 3.7之前,Objective-C已经可以使用类似@100.@YES.@10.5f等字面量表示一个NSNumber对象:用类似@"xxx"的字面量表示一个NSStri ...

  9. 转:union 联合体(共用体)

    转自:http://blog.csdn.net/xiao3404/article/details/22276485 2.共用体 2.1共用体的概念 共用体是一种构造类型的数据结构.在一个“共用体”内可 ...

随机推荐

  1. C++传递函数指针

    函数指针是一个很好的类型.因此,您可以编写一个函数,它的一个参数是一个函数指针.然后.在(外部)当函数使用的函数指针参数,来间接调用时调用相应的参数的函数的函数. 因为指针在不同的情况下能够指向不同的 ...

  2. client对象层次和0级DOM

    刚開始学了两天JS,闲着无聊,顺手画了张图

  3. 关于扩展IP地址空间的几个方案的探讨

    摘  要:在IP地址紧缺的背景下,IPv6.NAPT.SuIP几种解决方案应运而生.分析.比较几种方案后,可知SuIP是最佳方案. 关键词:IPv6:NAPT:SuIP:IP地址空间扩展 The In ...

  4. poj 3259(bellman最短路径)

    Wormholes Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 30169   Accepted: 10914 Descr ...

  5. 重新想象 Windows 8 Store Apps (30) - 信息: 获取包信息, 系统信息, 硬件信息, PnP信息, 常用设备信息

    原文:重新想象 Windows 8 Store Apps (30) - 信息: 获取包信息, 系统信息, 硬件信息, PnP信息, 常用设备信息 [源码下载] 重新想象 Windows 8 Store ...

  6. Java Web整合开发(78) -- Struts 1

    在Struts1.3中已经取消了<data-sources>标签,也就是说只能在1.2版中配置,因为Apache不推荐在 struts-config.xml中配置数据源.所以建议不要在st ...

  7. 苹果Swift编程语言新手教程【中文版】

    文件夹 1 简单介绍 2 Swift入门 3 简单值 4 控制流 5 函数与闭包 6 对象与类 7 枚举与结构 1 简单介绍 Swift是供iOS和OS X应用编程的新编程语言,基于C和Objecti ...

  8. [C/C++]_[VS2010来源与UTF8中国字符串转码ANSI问题]

    现场: 1.思想vs设置源文件UTF8编码,代码中国串出现在它必须是utf8编码,不幸的是,,假定源代码将出现在中国字符串,在存储器中转码ANSI编码. Unicode(UTF8签名) 代码页(650 ...

  9. IntelliJ IDEA 问题总结之中的一个 —— jar包、assets、maven、git

    因为工作须要,这几天開始弃用eclipse,换idea.用了几天,idea确实有些地方比較方便.可是麻烦也是不少.并且网上相应的资料并没有eclipse那么多,非常多都是自己琢磨解决的,所以想弄个帖子 ...

  10. 解决adb server is out of date. killing...问题

    在运行 adb 命令时出现了例如以下提示: adb server is out of date.  killing... 导致 adb 无法正常启动,更无法运行其它命令. 有问题怎么办?百度呗.查了查 ...