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

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

定义联合体

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

union [union tag]
{
member definition;
member definition;
...
member definition;
} [one or more union variables];

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

union Data
{
int i;
float f;
char str[20];
} data;

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

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

#include <stdio.h>
#include <string.h> union Data
{
int i;
float f;
char str[20];
}; int main( )
{
union Data data; printf( "Memory size occupied by data : %d\n", sizeof(data)); return 0;
}

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

Memory size occupied by data : 20

访问联盟成员

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

#include <stdio.h>
#include <string.h> union Data
{
int i;
float f;
char str[20];
}; int main( )
{
union Data data; data.i = 10;
data.f = 220.5;
strcpy( data.str, "C Programming"); printf( "data.i : %d\n", data.i);
printf( "data.f : %f\n", data.f);
printf( "data.str : %s\n", data.str); return 0;
}

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

data.i : 1917853763
data.f : 4122360580327794860452759994368.000000
data.str : C Programming

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

#include <stdio.h>
#include <string.h> union Data
{
int i;
float f;
char str[20];
}; int main( )
{
union Data data; data.i = 10;
printf( "data.i : %d\n", data.i); data.f = 220.5;
printf( "data.f : %f\n", data.f); strcpy( data.str, "C Programming");
printf( "data.str : %s\n", data.str); return 0;
}

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

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. Entrez Direct

    安装 cd ~/bin/bashperl -MNet::FTP -e \'$ftp = new Net::FTP("ftp.ncbi.nlm.nih.gov", Passive = ...

  2. 5、python中的列表

    list是python内置的一种有序.可变的数据结构. 一.如何创建一个list? 示例: 注意: list中的元素可以是任意的数据类型如字符串.数字.布尔值.None等,也可以是其他的数据结构如另外 ...

  3. UVA_10653 公主与王子 #刘汝佳DP题刷完计划

    题意如蓝书66页例题27所示. 这个问题描述了一个LCS的特殊情况——单个字符串内所有元素各不相同. 题目要求输入两个数字串,A,B,要求求出最长公共字串.且数字上限是256*256. 做法:数组A表 ...

  4. Tomcat之web.xml中的<url-pattern>标签

    关于web.xml配置中的<url-pattern> 标签<url-pattern> <url-pattern>是我们用Servlet做Web项目时需要经常配置的标 ...

  5. 【3Sum Closest 】cpp

    题目: Given an array S of n integers, find three integers in S such that the sum is closest to a given ...

  6. git+jenkins持续集成一:git上传代码

    先注册一个账号,注册地址:https://github.com/ 记住地址 下载git本地客户端,下载地址:https://git-scm.com/download/win 一路next傻瓜安装,加入 ...

  7. XMLHttpRequest对象创建

    本文摘抄自:Ajax知识体系大梳理地址:http://louiszhai.github.io/2016/11/02/ajax/本文内容并不完整,请到原文阅读. if (window.XMLHttpRe ...

  8. 【转】Unity摄像机的使用二:摄像机的切换

    http://blog.csdn.net/liujunjie612/article/details/45847877 我们接着上一篇博文继续研究摄像机,这篇我们说下Unity中摄像机的切换,说到切换, ...

  9. mybatis maven 代码生成器(mysql)

    pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...

  10. chrome+postman测试rest请求

    1.在chrome安装postman 2.在chrome打开postman 浏览器输入:chrome://apps/ 选择你的postman 3.在你看到的postman中 normal中可以看到参数 ...