- 1、本文档共31页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C语言共用体和枚举
12.1 共用体类型与共用体变量
12.2 共用体变量的引用
12.3 共用体变量的应用
12.4 位运算与位段结构
12.5 枚举类型
12.6 类型定义;12.1 共用体类型与共用体变量;?
;(2) 定义共用体类型的同时定义共用体变量;注意区分:
“共用体”变量:各成员占相同的起始地址,在内存中所占字节数度等于最长的成员在内存中所占的字节数。
“结构体”变量:各成员占不同的地址,在内存中所占字节数等于全部成员在内存中所占的字节数之和。;12.2 共用体变量的引用 ; 说明:
(1) 共用体变量中,可以包含若干个成员及若干种类型,但共用体成员不能同时使用。在每一时刻,只有一个成员及一种类型起作用,不能同时引用多个成员及多种类型。
(2) 共用体变量中起作用的成员值是最后一次存放的成员值,因为共用体变量所有成员共同占用同一段内存单元,后来存放的值将原先存放的值覆盖,故只能使用最后一次给定的成员值。如: a.i=278, a.ch=’D’, a.f=5.78;
不能企图通过下面的printf函数得到a.i和a.ch的值:
printf(“%d,%c,%f”, a.i, a.ch, a.f);
但能得到a.f的值。; (3) 共用体变量的地址和它的各个成员的地址相同。
(4) 不能企图引用共用体变量名来得到某成员的值。
(5) 共用体变量不能作函数参数,函数的返回值也不能是共用体类型。
(6) 共用体类型和结构体类型可以相互嵌套,共用体中成员可以为数组,甚至还可以定义共用体数组。 ;例12.1 写出下列程序的执行结果;12.3 共用体变量的应用
例12.2 设有若干教师的数据,包含有教师编号、姓名、职称,若职称为讲师,则描述他们的所讲课程,若职称为教授,则描述他们所写论文数目。 ;#define format ″%d %s %c ″
main( )
{
int i;
for(i=0; i3; i++)
{scanf(format,teach[i].no,teach[i].name, teach[i].zc);
if ( teach[i].zc= =‘L’)
scanf(”%s”, teach[i].x .clname);
else if (teach[i].zc= =‘P’)
scanf (”%d”, teach[i].x .num);
else printf (”input data error\n”);
};for(i=0; i3; i++)
{
printf ( ″%d %s %c ″ ,
teach[i].no,teach[i].name,teach[i].zc);
if (teach[i].zc= =‘L’)
printf (”%s\n”, teach[i].x.clname);
else if ( teach[i]. zc= =‘ P’ )
printf (%d\n, teach[i].x. num);
else printf(″data error\n″);
}
} ;12.4 位运算与位段结构;1.按位与── (1)格式:xy (2)规则:对应位均为1时才为1,否则为0:
例如,39=1: 0011
1001
0001=1
(3)主要用途:取(或保留)1个数的某(些)位,其余各位置0。
2.按位或──| (1)格式:x|y (2)规则:对应位均为0时才为0,否则为1: ;例如,3|9=11: 0011
| 1001
1011=11 (3)主要用途:将1个数的某(些)位置1,其余各位不变。
3.按位异或──
文档评论(0)