C语言之共用体
最近在复习C语言,特再次记录:
有时需要将几种不同类型的变量存放到同一段内存单元中。如一个int、float、char放在同一个地址开始的内存单元中。,也就是使用覆盖技术,几个变量相互覆盖,称之为共用体。
union 共用体名
{
int i;
float f;
char ch;
} ;
union 共用体名 a, b, c;
可以看到,和结构体的定义形式很相似,但它们的含义不同。
结构体变量所占内存长度是各成员占的内存长度之和,每个成员分别占有其自己的内存单元。
共用体变量所占内存长度等于最长的成员占的内存长度。
不能只引用共用体变量,必须指定使用的是哪一个成员的值。
注意:
1.同一个内存段可以用来存放几种不同类型的成员,但是每一瞬间只能存放其中一种,即每一瞬间只有一个成员在起作用。
2.共用体变量中起作用的成员是最后一次存放的成员,在存入一个新的成员后原有的成员就失去了作用。
3.共用体变量的地址和他的各成员的地址都是同一地址。
4.不能对共用体变量名赋值,也不能企图引用变量名来的得到一个值,不能在定义共用体变量时对他初始化。
5.不能把共用体变量作为函数指针,也不能使函数带回共用体变量,但可以使用指向共用体变量的指针。
6.共用体类型可以出现在结构体类型定义中,也可以定义共用体数组,反之也可以。
C语言之共用体的更多相关文章
- (C语言)共用体union的使用方法举例
曾经在学校学习C语言的时候一直搞不懂那个共用体union有什么用的.工作之后才发现它的一些妙用,现举比例如以下: 1. 为了方便看懂代码. 比方说想写一个3 * 3的矩阵,能够这样写: [ 注:以下用 ...
- [C#.NET 拾遗补漏]14:使用结构体实现共用体
在 C 和 C# 编程语言中,结构体(Struct)是值类型数据结构,它使得一个单一变量可以存储多种类型的相关数据.在 C 语言中还有一种和结构体非常类似的语法,叫共用体(Union),有时也被直译为 ...
- 瘋子C语言笔记(结构体/共用体/枚举篇)
(一)结构体类型 1.简介: 例: struct date { int month; int day; int year; }; struct student { int num; char name ...
- 不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符
[源码下载] 不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 结构体 ...
- 全国计算机等级考试二级教程-C语言程序设计_第14章_结构体、共用体和用户定义类型
函数的返回值是结构体类型 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> struct ...
- C语言高级-结构,共用体,文件,链表
C语言结构 标准声明方式 struct student{ int age; char sex; }; 这个可以在main函数中定义: struct student ...
- 07.C语言:结构体、共用体、枚举
一.结构体 是一种复合的数据类型,由多个不同类型的数据(为结构体的成员)组成的集合. 在c语言中没有给出结构体这种类型具体的形式(名称),但是给出类定义该结构体类型的方法(格式). 在使用结构体类型时 ...
- C语言中的共用体(union)和枚举(enum)
1 union union Data{ int i; char ch; float f; }a={1, 'a', 1.5}; //错误 union Data a = {16}; //正确 union ...
- C语言笔记 09_共用体&typedef&输入|输出
共用体 共用体允许您在相同的内存位置存储不同的数据类型.您可以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值.共用体提供了一种使用相同的内存位置的有效方式. 定义共用体 为了定义共用体, ...
随机推荐
- ASP。net treeview xml
this.TreeView2.ShowLines = false; //显示连接子节点与父节点之间的线条 TreeNodeBinding area = new TreeNodeBinding(); a ...
- CentOs 设置静态IP 方法
在做项目时由于局域网采用自动获取IP的方式,导到每次服务器重启主机IP都会变化. 为了解决这个问题,需要设置静态IP. 1.修改网卡配置 编辑:vi /etc/sysconfig/network-sc ...
- centos 7
vmlinuz initrd=initrd.img linux dd quiet vmlinuz initrd=initrd.img inst.stage2=hd:/dev/sdb4 quiet 关I ...
- BZOJ 3229: [Sdoi2008]石子合并
3229: [Sdoi2008]石子合并 时间限制: 3 Sec 内存限制: 128 MB提交: 497 解决: 240[提交][][] 题目描述 在一个操场上摆放着一排N堆石子.现要将石子有次序 ...
- timer控件、三级联动
timer控件: 实现时间日期自增长: using System; using System.Collections.Generic; using System.ComponentModel; usi ...
- iOS核心动画学习整理
最近利用业余时间终于把iOS核心动画高级技巧(https://zsisme.gitbooks.io/ios-/content/chapter1/the-layer-tree.html)看完,对应其中一 ...
- JDK中的native2ascii命令详解
1.native2ascii简介: native2ascii是sun java sdk提供的一个工具.用来将别的文本类文件(比如*.txt,*.ini,*.properties,*.java等等)编码 ...
- java判断时间是否是今天
SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd"); Date d1=format.parse(FHavetime ...
- features block
很轻松就能把一个新建的block导出到一个module包里.
- jqGrid表格控件
一. jqGrid的加载. 1.引用相关头文件 引入CSS: <link type="text/css" rel="stylesheet" href=&q ...