C++自定义数据类型之联合
2015-02-23 10:14
253 查看
联合
联合是类型不同,数目固定的若干个变量的集合。组成联合的若干个成员是共用一个内存地址。
联合的定义格式:
union <联合名>
{
<联合成员说明>
};
联合变量的定义格式:
union <联合名> <联合变量名表>
在定义一个联合变量之前,必须先定义一种联合模式。联合的成员包含几乎所有类型,也包括结构变量。任何一个联合变量都是某种联合模式 的联合变量。
union date
{
char c;
int i;
double d;
} d1,*p;
这是联合模式和联合变量同时定义,而分开的单独定义是:
union date
{
char c;
int i;
double d;
} ;
union date d1,*p;
联合成员的表示方法:
一般联合变量成员:<联合变量名>.<联合成员名> d1.c
指向联合变量指针成员:<指向联合变量指针名> -> <联合成员名>
p->c
联合变量的赋值:
一般联合变量赋值: d1.c=‘m';
指向联合变量指针赋值: p ->c='m';
注意:
联合成员共址的特征使得只能对联合变量成员赋值,不能对联合变量赋值。
由于联合变量中的若干个成员共用一个内存地址,因此,在联合变量中只有最近一次被赋值的成员是有意义的。
系统规定,在某个联合的诸多成员中,选定数据长度最大者作为该联合变量所占内存的数据长度,这保证联合成员中具有最大数据长度的成员能够安全地存放在该联合变量所被分配的内存单元中。
联合变量只能用指向联合变量的指针作为函数参数,联合变量不能作为函数参数,联合变量也不能作为函数的返回值。
例一说明联合成员的公共特性:
例二说明联合的若干个成员是共用内存同一个地址的:
![](http://img.blog.csdn.net/20150223114233716?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZXJsaWFuMTk5Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
联合的应用:
1,在出现两个相互排斥条件下的情况下,可选用联合,因为在某一个时刻只能出现其中的一种条件。
2,联合结构中可以有结构变量,结构中也可以有联合变量。
联合是类型不同,数目固定的若干个变量的集合。组成联合的若干个成员是共用一个内存地址。
联合的定义格式:
union <联合名>
{
<联合成员说明>
};
联合变量的定义格式:
union <联合名> <联合变量名表>
在定义一个联合变量之前,必须先定义一种联合模式。联合的成员包含几乎所有类型,也包括结构变量。任何一个联合变量都是某种联合模式 的联合变量。
union date
{
char c;
int i;
double d;
} d1,*p;
这是联合模式和联合变量同时定义,而分开的单独定义是:
union date
{
char c;
int i;
double d;
} ;
union date d1,*p;
联合成员的表示方法:
一般联合变量成员:<联合变量名>.<联合成员名> d1.c
指向联合变量指针成员:<指向联合变量指针名> -> <联合成员名>
p->c
联合变量的赋值:
一般联合变量赋值: d1.c=‘m';
指向联合变量指针赋值: p ->c='m';
注意:
联合成员共址的特征使得只能对联合变量成员赋值,不能对联合变量赋值。
由于联合变量中的若干个成员共用一个内存地址,因此,在联合变量中只有最近一次被赋值的成员是有意义的。
系统规定,在某个联合的诸多成员中,选定数据长度最大者作为该联合变量所占内存的数据长度,这保证联合成员中具有最大数据长度的成员能够安全地存放在该联合变量所被分配的内存单元中。
联合变量只能用指向联合变量的指针作为函数参数,联合变量不能作为函数参数,联合变量也不能作为函数的返回值。
例一说明联合成员的公共特性:
#include <iostream.h> union date { float f_date; int i_date; double d_date; }; void main() { union date d; d.f_date=2.4; d.i_date=1; d.d-date=1.2; cout<<d.f_date<<','<<d.i_date<<','<<d.d_date<<endl; cout<<sizeof(d)<<endl; cout<<&d<<','<<&d.f_date<<','<<&d.i_date<<','<<&d.d_date<<endl; }
例二说明联合的若干个成员是共用内存同一个地址的:
#include <iostream.h> void main() { union { int a[3]; char s[12]; }t; t.a[0]=0x20494542; t.a[1]=0x474e494a; t.a[2]=0x00000a21; cout<<t.s; }
联合的应用:
1,在出现两个相互排斥条件下的情况下,可选用联合,因为在某一个时刻只能出现其中的一种条件。
2,联合结构中可以有结构变量,结构中也可以有联合变量。
union address { struct off_school town; struct in_school gown; }; struct off_school { int strnum; char strnamen[20]; char city[20]; }; struct in_school { char collname[10]; char dorm[10]; int roomnum; };
分析:对于一个学生来说,校内和校外地址只能选择一种,不可能一个学生同时存在两种地址。
相关文章推荐
- Struct结构体是C/C++语言中用来自定义数据类型的
- 《C++案例指导》(3)C++流程控制、自定义数据类型
- C++自定义数据类型之指针
- C++ 高级数据类型(六)—— 自定义数据类型
- c++ 哪些自定义的数据类型
- c++primer第二章“c++定义了几种基本类型,还提供了可用于自定义数据类型的机制,此外,我们还能修改已有的类型以形成复合类型”
- C++自定义数据类型
- C++自定义数据类型之枚举
- C++学习笔记(第七章 自定义数据类型 结构体应用 之三)
- C++ 高级数据类型(六)—— 自定义数据类型
- C++自定义数据类型
- C++中的自定义数据类型(结构体)解析
- C++自定义数据类型
- C++自定义数据类型之结构
- 自学C++之自定义数据类型与自定义类之数组使用4例
- 一个使用c++在lua中创建自定义数据类型的简易方法
- C++内嵌数据类型与自定义包裹类
- C++ 自定义数据类型:结构体,共用体,枚举
- C++内容总结--自定义数据类型
- C++自定义数据类型之类和简单对象