【C语言入门教程】7.4 共用体
7.4 共用体
共用体又称为联合体,是由不同的数据类型组成的一个整体。与结构体不同的是,共用体每次只能使用其中一个成员。结构体的总长度是结构体所有成员长度之和,共用体的总长度是其中最长一个数据类型的长度,共用体的所有成员共享这一存储空间。在一些场合中,只需要使用某一类型的变量而其他类型的变量暂时不需要使用。当使用另一类型变量时,原先的变量也转为与程序无关,这种情况下可使用共用体节省同时存在多种数据类型变量所需要的额外空间。
7.4.1 共用体的定义
定义共用体使用修饰符 union,一般形式是:
union 共用体名
{
成员列表
};
共用体名是该共用体独一无二的名称,命名规则与变量命名相同。成员项列表是共用体中数据成员的数据类型和名称,数据成员可以是变量、数组或者其他结构体等复合数据结构,各成员通常不使用相同的数据类型。成员项列表的一般形式为:
数据类型 成员名1;
数据类型 成员名2;
数据类型 成员名3;
使用共用体声明变量的一般形式为:
union 共用体名 共用体变量名;
该语句只能在共用体定义后出现。如下例所示:
union unidate
{
char a;
int b;
long c;
doubule d;
};
union unidate x;
共用体成员中,长度最长的是双精度浮点型 d,共用体变量 x 的长度为双精度浮点型数据类型的长度。
7.4.2 共用体变量的引用
共用体变量的引用方式与结构体变量相同,一般形式为:
共用体名.成员名
但共用体一次只能使用一个成员,如下例所示:
#include <stdio.h> int main(void)
{
union unidate // 共用体名
{
char a; // 共用体成员
int b;
long c;
double d;
}; union unidate x; // 声明共用体变量
x.a = 65; // 为成员 a 赋值
printf("x.a = %c\n", x.a); x.b = 100;
printf("x.b = %d\n", x.b); // 为成员 b 赋值 x.c = 10005000; // 为成员 c 赋值
printf("x.c = %ld\n", x.c); x.d = 0.69314718056; // 为成员 d 赋值
printf("x.d = %f\n", x.d); printf("x.a = %c\n", x.a); // 再次输出成员 a,这时成员 a 已经没被使用 return 0;
}
该程序的输出结果为:
x.a = A
x.b = 100
x.c = 10005000
x.d = 0.693147
x.a =
最后一次输出的结果为不可预知的,因为共用体 x 的存储空间中已经被成员 x.d 使用过,而输出成员 x.a 前,没有重新为成员 x.a 赋值,这时如果引用成员 x.a 的数据,获得的是成员 x.d 的一部分数据,所以输出结果可能因系统环境的不同而有差异。
【C语言入门教程】7.4 共用体的更多相关文章
- 《JavaScript语言入门教程》记录整理:运算符、语法和标准库
目录 运算符 算数运算符 比较运算符 布尔运算符 二进制位运算符 void和逗号运算符 运算顺序 语法 数据类型的转换 错误处理机制 编程风格 console对象和控制台 标准库 Object对象 属 ...
- 《Ruby语言入门教程v1.0》学习笔记-01
<Ruby语言入门教程v1.0> 编著:张开川 邮箱:kaichuan_zhang@126.com 想要学习ruby是因为公司的自动化测试使用到了ruby语言,但是公司关于ruby只给了一 ...
- 智能合约语言 Solidity 教程系列6 - 结构体与映射
写在前面 Solidity 是以太坊智能合约编程语言,阅读本文前,你应该对以太坊.智能合约有所了解, 如果你还不了解,建议你先看以太坊是什么 本系列文章一部分是参考Solidity官方文档(当前最新版 ...
- C语言入门教程-(5)格式化输入输出
1.输入和输出 在程序的使用中,我们经常可以看的这么一个场景:用户需要输入数据,经过程序运算,得到结果后输出.在C语言中,输入数据和输出数据都是由库函数完成的,通过语句来输入/输出. 2.格式化输出— ...
- Go语言入门教程(十)之函数
Hello 各位小伙伴大家好,我是小栈君,假期一眨眼就过去了.不知道大家玩的是否开心呢? 上次我们讲到了关于Go语言的流程控制,小栈君也希望小伙伴跟着小栈君一步一个脚印的敲一下代码,相互进步.本期我们 ...
- c语言该怎么入门?C语言入门教程(非常详细)
C语言是一门面向过程的编译型语言,它的运行速度极快,仅次于汇编语言.C语言是计算机产业的核心语言,操作系统.硬件驱动.关键组件.数据库等都离不开C语言:不学习C语言,就不能了解计算机底层. 这套「C语 ...
- 《JavaScript语言入门教程》记录整理:入门和数据类型
目录 入门篇 js介绍 历史 基本语法 数据类型 概述 null 和 undefined 数值 字符串 对象 函数 数组 本系列基于阮一峰老师的<JavaScrip语言入门教程>或< ...
- 《JavaScript语言入门教程》记录整理:面向对象
目录 面向对象编程 实例对象与 new 命令 this关键字 对象的继承 Object对象的方法 严格模式(strict mode) 本系列基于阮一峰老师的<JavaScrip语言入门教程> ...
- Go 语言入门教程,共32讲,6小时(已完结)
Go语言入门教程,共32讲,6小时(完结) 在B站:https://www.bilibili.com/video/BV1fD4y1m7TD/
随机推荐
- 常用RSS订阅地址
随着Google Reader关门大吉,转战鲜果网了,RSS订阅地址经过几次折腾,丢的没剩几个了,写个文章记录一下吧,随时补充. --PS-- ,微信.微博之类的是社交平台,不能很好的梳理知识,一直用 ...
- Python编码格式的指定方式
参考自: http://python.jobbole.com/85852/, 原文探究的更深,有兴趣的可以去看看. 简介来讲就是使用一种特殊的注释来声明编码格式,如何判断这种格式也用了很简单粗暴有效的 ...
- 自然语言15.1_Part of Speech Tagging 词性标注
QQ:231469242 欢迎喜欢nltk朋友交流 https://en.wikipedia.org/wiki/Part-of-speech_tagging In corpus linguistics ...
- CentOS系统rsync文件同步 安装配置
rsync是类unix系统下的数据镜像备份工具,从软件的命名上就可以看出来了——remote sync 它的特性如下: 可以镜像保存整个目录树和文件系统. 可以很容易做到保持原来文件的权限.时间.软硬 ...
- JS转码
JS转码是解决XSS漏洞的方案,XSS漏洞是指对dom操作时,出现特殊字符造成的安全泄露. XSS漏洞的主要来源有: 1.URL(需要对url进行encodeURIComponent转码). 2.数据 ...
- Unity3D热更全书
http://www.cnblogs.com/crazylights/p/3897742.html
- Http常用状态码
HTTP状态码(HTTP Status Code) 一些常见的状态码为: 200 - 服务器成功返回网页 404 - 请求的网页不存在 503 - 服务不可用 所有状态解释:点击查看 1xx(临时响应 ...
- PostSharp AOP
使用PostSharp 在.NET 平台上实现 AOP 摘要 本文首先介绍AOP(面向方面编程)的相关概念及理论,然后介绍如何使用PostSharp框架在.NET平台上实现AOP,最后对PostS ...
- 使用EntityFramework6.1的DbCommandInterceptor拦截生成的SQL语句
开始 EF6.1也出来不少日子了,6.1相比6.0有个很大的特点就是新增了System.Data.Entity.Infrastructure.Interception 命名空间,此命名空间下的对象可以 ...
- log4j2 使用
转载自 Blog of 天外的星星: http://www.cnblogs.com/leo-lsw/p/log4j2tutorial.html Log4j 2的好处就不和大家说了,如果你搜了2,说明你 ...