- 1、本文档共24页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第10章 共用体枚举类型
第10章 共用体枚举类型
10.1 共用体
共用体——不同数据类型的数据项组成一个整体的构造数据类型。共用体变量的各个成员共同占用同一内存单元,即共用体变量所占用的存储空间的字节数,不是各成员所需字节数的总和,而是共用体各成员中需要空间最大的那个成员所需要的字节数。
1. 共用体类型的定义
定义格式:
union 共用体名
{
数据类型 成员名1;
数据类型 成员名2;
……
};
如:
union data
{
int i;
char ch;
float f;
};
这样就定义了一种共用体数据类型data,是一个含用i,ch,f三个成员的构造类型,该类型数据在内存中元占用的字节数与float类型的数据相同,即4个字节。
例:比较共用体和结构。
#includestdio.h
union A
{
char ch;
short i;
long f;
};
struct B
{
char ch;
short i;
long f;
};
main()
{
union A AA;
struct B BB;
printf(%d %d %d %d\n,sizeof(AA),sizeof(AA.i),sizeof(AA.ch),sizeof(BB.f));
printf(%d %d %d %d\n,sizeof(BB),sizeof(BB.i),sizeof(BB.ch),sizeof(BB.f));
AA.i=97;AA.ch=98;AA.f=99;
BB.i=97;BB.ch=98;BB.f=99;
printf(%d %c %d\n,AA.i,AA.ch,AA.f);
printf(%d %c %d\n,BB.i,BB.ch,BB.f);
printf(%x %x %x\n,AA.i,AA.ch,AA.f);
printf(%x %x %x\n,BB.i,BB.ch,BB.f);
}
程序运行后输出:
4 2 1 4 //共用体占用空间为各成员中最长类型的字节数
8 2 1 4 //结构体占用的空间=各成员占用节数之和
99 c 99 //共体各成员的值均=最后一次向某成员的赋值
97 b 99 //结构体各成员的值是独立的
12ff7c 12ff7c 12ff7c//共用体各成员共享同一存储空间
12ff74 12ff76 12ff78//结构体各成员分配有独立的存储空间
注意:共用体用结构的区别是:
⑴共用体变量中的各成员共享同一存储空间;为结构体变量中的各成员均分配有独立的存储空间。
⑵在共用体变量中,向一个成员赋值,其它成员的值均随之改变,即同一时刻只有一个成员的值存储在该存储体中,其他成员的值被其复盖;在结构体变量中,各成员的值互不影响,在同一时刻各成员的值都安全地存储在各自独立的存储单元中,不会相互复盖。
2. 共用体变量的定义
共用体变量的定义与结构体变量的定义相同。
⑴先定义共用体类型,然后定义共用体变量。例如:
union data a,b,c,*p,d[3];
⑵在定义共用体类型的同时定义共用体变量。例如:
union data
{
int i;
char ch;
float f;
}a,b,c,*p,d[3];
⑶定义与说明同时进行,不提供共用体名,为无名共用体。例如:
union
{
int i;
char ch;
float f;
}a,b,c,*p,d[3];
10.2 共用体变量成员的引用
⑴引用共用体变量成员的方式有三种:
共用体变量名.成员名
共用体指针名-成员名
(*共用体指针名).成员名
例如:
#includestdio.h
#includestdlib.h
union data
{
int i;
char ch;
short f;
};
void main()
{
union data a,*p;
p=a;
a.i=120;
printf(%d %c %d\n,a.i,p-ch,(*p).f);
printf(%0x %0x %0x\n,(a.i),(a.ch),(a.f));
}
运行结果为:
120 x 120
12ff7c 12ff7c 12ff7c
可见,三个成员i、ch、f确实共同用一地址空间
⑵引用规则
◇不能引用共用体变量,只能引用其成员。例如:
a=120;
是错的。
◇可以用一个共用体变量为另一个共用体变量赋值。例如:
#includestdio.h
#includestdlib.h
union data
{
int i;
char ch;
short f;
};
void main()
{
union
文档评论(0)