C语言联合体Unions实例代码教程 - 联合是一种特殊的数据类型在C语言中,使您可以存储不同的数据类型相同的内存位置。

联合是一种特殊的数据类型在C语言中,使您可以存储不同的数据类型相同的内存位置。您可以定义一个工会的许多成员,但在任何给定时间只有一个成员都可以包含一个值。工会提供了一个有效的方式使用相同的内存位置的多用途。

定义联合体

要定义一个工会,你必须使用UNION语句非常相似的是,像你一样在定义结构。 UNION语句定义了一个新的数据类型,与一个以上的成员为你的程序。 UNION语句的格式如下:

  1. union [union tag]
  2. {
  3. member definition;
  4. member definition;
  5. ...
  6. member definition;
  7. } [one or more union variables];

联合标记是可选的,每个成员的定义是一个普通的变量定义,如int;或浮动f;或任何其他有效的变量定义。在联盟的定义,之前的最后一个分号,你可以指定一个或多个工会变量,但它是可选的。这里是您将定义一个名为Data的联合类型,其中有三名成员,F,和str的方式:

  1. union Data
  2. {
  3. int i;
  4. float f;
  5. char str[20];
  6. } data;

现在,一个变量的数据类型可以存储一个整数,浮点数,字符串的字符。这意味着,一个变量,即。存储多种类型的数据,可以使用相同的内存位置。您可以使用任何内置或用户定义的数据类型在一个工会根据您的需求。

占用的内存由工会将大到足以容纳最大的工会会员。例如,在上面的例子中的数据类型将占用20个字节的存储空间,因为这是最大的空间,它可以占用字符串。下面的例子将显示所占用的内存大小由上述工会:

  1. #include <stdio.h>
  2. #include <string.h>
  3. union Data
  4. {
  5. int i;
  6. float f;
  7. char str[20];
  8. };
  9. int main( )
  10. {
  11. union Data data;
  12. printf( "Memory size occupied by data : %d\n", sizeof(data));
  13. return 0;
  14. }

上面的代码编译和执行时,它会产生以下结果:

Memory size occupied by data : 20

访问联盟成员

要访问任何联合的成员,我们使用成员访问运算符(.)。被编码为一个周期工会之间的变量名和工会成员,我们希望访问的成员访问运算符。你会使用union关键字来定义联合类型的变量。以下是工会使用的例子来解释:

  1. #include <stdio.h>
  2. #include <string.h>
  3. union Data
  4. {
  5. int i;
  6. float f;
  7. char str[20];
  8. };
  9. int main( )
  10. {
  11. union Data data;
  12. data.i = 10;
  13. data.f = 220.5;
  14. strcpy( data.str, "C Programming");
  15. printf( "data.i : %d\n", data.i);
  16. printf( "data.f : %f\n", data.f);
  17. printf( "data.str : %s\n", data.str);
  18. return 0;
  19. }

上面的代码编译和执行时,它会产生以下结果:

  1. data.i : 1917853763
  2. data.f : 4122360580327794860452759994368.000000
  3. data.str : C Programming

在这里我们可以看到,i和f工会成员的值被损坏了,因为最后的值赋值给变量占用的内存位置,这是如果str的值成员要印出来不太清楚的原因。现在,让我们来看看同样的例子再次,在这里,我们将使用一个变量的时间,这是有工会的主要目的:

  1. #include <stdio.h>
  2. #include <string.h>
  3. union Data
  4. {
  5. int i;
  6. float f;
  7. char str[20];
  8. };
  9. int main( )
  10. {
  11. union Data data;
  12. data.i = 10;
  13. printf( "data.i : %d\n", data.i);
  14. data.f = 220.5;
  15. printf( "data.f : %f\n", data.f);
  16. strcpy( data.str, "C Programming");
  17. printf( "data.str : %s\n", data.str);
  18. return 0;
  19. }

上面的代码编译和执行时,它会产生以下结果:

data.i : 10

data.f : 220.500000

data.str : C Programming

在这里,所有的成员都印出来不太清楚,因为一名成员正在使用一次。

浅谈C语言中的联合体

http://www.cnblogs.com/dolphin0520/archive/2011/10/03/2198493.html

C语言联合体的更多相关文章

  1. C语言联合体(union)的使用方法及其本质-union

    转载自:https://blog.csdn.net/si_zhou_qun_84342712/article/details/53187106 1.联合体union的基本特性——和struct的同与不 ...

  2. C语言基础--结构体对齐,位域,联合体

    结构体对齐 1--结构体对齐的原因与意义 许多计算机系统对基本数据类型的可允许地址做出了一些限制,要求某种类型的对象的地址必须是某个值K(通常是2,4,8)的倍数,而这个k则被称为该数据类型的对齐模数 ...

  3. Android For JNI(五)——C语言多级指针,结构体,联合体,枚举,自定义类型

    Android For JNI(五)--C语言多级指针,结构体,联合体,枚举,自定义类型 我们的C已经渐渐的步入正轨了,基础过去之后,就是我们的NDK和JNI实战了 一.多级指针 指针的概念我们在前面 ...

  4. Android JNI编程(六)——C语言函数指针、Unition联合体、枚举、Typedef别名、结构体、结构体指针

    版权声明:本文出自阿钟的博客,转载请注明出处:http://blog.csdn.net/a_zhon/. 目录(?)[+] 一:函数指针 1.函数指针顾名思义就是定义一个指针变量指向一个函数,和一级指 ...

  5. C语言学习笔记10-结构体、枚举、联合体

    C语言学习笔记10-结构体.枚举.联合体    待传

  6. 如何系统学习C 语言(中)之 联合体、枚举篇

    在C语言中有一个和结构体非常像的数据类型,它的名字叫做联合体,也被称为共用体或公用体. 1,联合体 1,联合体的定义 定义联合体需要使用"union" 关键字,格式如下: unio ...

  7. 嵌入式-C语言基础:联合体和共用体的概念

    有时候同一块内存空间存放类型不同,不同类型的变量共享一块空间. 结构体和共用体的区别: (1)结构体元素有各自单独空间,共用体元素共享空间,空间大小由最大类型确定. (2)结构体元素互不影响共用体赋值 ...

  8. [汇编与C语言关系]4. 结构体和联合体

    用反汇编的方法研究一下C语言的结构体: #include <stdio.h> int main(int argc, char ** argv) { struct { char a; sho ...

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

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

随机推荐

  1. 解决cmd目录下pip命令不存在的问题

    解决cmd目录下pip命令不存在的问题 注:pip.exe程序在Python安装目录下的scripts中1.在cmd命令中输入: 先输入:python -m ensurepip 再输入:python ...

  2. proc的妙用

    今天在在公司做网络驱动开发测试时,随机包出现收包计数停止的现象,当时怀疑是DMA rx buffer不足导致,想通过对比收发包正常和收发包不正常是DMA相关寄存器的情况. 后跟踪代码,若在收发包里面增 ...

  3. CCPC_1005

    可怕.....的提.....显而易见的规律活活没照出来...不过说起来却是不能严格证明....于是...脑筋急转弯活活猜不出来..... 1*1->1*2->2*2->2*3-> ...

  4. 数据库sql中distinct用法注意事项

    在写sql中去重复等操作,需要用到distinct. 在使用distinct的时候要注意,尤其是在有行列转换的时候.要把sql运行出来看看是不是与你想要的结果一样. 通过自己试验,distinct有从 ...

  5. windows下虚拟环境中配置MySQL-python错误问题

    下载mysql 下载mysql-python 这两步基本没有问题怪就怪的 MySQL-python-1.2.3.win-amd64-py2.7 文件只能安装到python27  路径下 然后在虚拟环境 ...

  6. cf984e Elevator

    ref我好菜啊 #include <iostream> #include <cstring> #include <cstdio> #include <cmat ...

  7. Java -X命令

    C:\Users\Administrator>java -X -Xmixed 混合模式执行 (默认) -Xint 仅解释模式执行 -Xbootclasspath:<用 ; 分隔的目录和 z ...

  8. appium环境搭建(python+windows)

    1.搭建Android开发环境 参见:http://blog.sina.com.cn/s/blog_44d19b500102voa7.html   2.安装Node.js 下载地址:https://n ...

  9. Linux 的日常 tools

    Linux基础命令里的就不再赘述了. Table of Contents 一.下载(命令行工具,只给出常用的命令说明) wget/cURL(一般系统自带) aria2/axel多线程下载 1. ari ...

  10. C#HTTP POST文件数据

    /// <summary> /// 上传文件 /// </summary> /// <param name="uriStr">服务器网址< ...