C语言程序设计第10章 自定义类型及其应用.ppt

C语言程序设计第10章 自定义类型及其应用.ppt

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
10.8 共用体 “共用体”也是一种构造类型的数据结构。在一个“共用体”内可以定义多种不同的数据类型,一个被说明为该“共用体”类型的变量中,允许装入该“共用体”所定义的任何一种数据。这在前面的各种数据类型中都是办不到的。例如,定义为整型的变量只能装入整型数据,定义为实型的变量只能赋予实型数据。 “共用体”与“结构体”有一些相似之处。但两者有本质上的不同。在结构体中各成员有各自的存储空间,一个结构体变量的总长度是各成员长度之和。而在“共用体”中,各成员共享一段存储空间,一个共用体变量的长度等于各成员中最长的长度。应该说明的是,这里所谓的共享不是指把多个成员同时装入一个共用体变量内,而是指该共用体变量可被赋予任一成员值,但每次只能赋一种值,赋入新值则冲去旧值。 10.8.1 共用体的定义 定义一个共用体类型的一般形式为: union 共用体名 { 成员表 }; 成员表中含有若干成员,成员的一般形式为: 类型说明符 成员名。 其中成员名的命名应符合标识符的规定。 10.8.1 共用体的定义 例如: union perdata { int class; char office[10]; }; 定义了一个名为perdata的共用体类型,它含有两个成员,一个为整型,成员名为class;另一个为字符数组,数组名为office。共用体定义之后,即可进行共用体变量说明,被说明为perdata类型的变量,可以存放整型量class或存放字符数组office。 10.8.2 共用体变量的说明 共用体变量的说明和结构体变量的说明方式相同,也有三种形式。即先定义类型再说明变量;定义类型同时说明变量和直接说明变量。以perdata类型为例,说明如下: union perdata { int class; char officae[10]; }; union perdata a,b; /*说明a,b为perdata类型*/ 或者可同时说明为: union perdata { int class; char office[10]; } a,b; 10.8.2 共用体变量的说明 或直接说明为: union { int class; char office[10]; }a,b; 经说明后的a,b变量均为perdata类型。它们的内存分配示意图如图10.4所示。 a,b变量的长度应等于 perdata 的成员中最长的长度,即等于office数组的长度,共10个字节。从图中可见,a,b变量如赋予整型值时,只使用了2或4个字节,而赋予字符数组时,可用10个字节。 10.8.3 共用体变量的赋值和使用 对共用体变量的赋值与使用都只能是对变量的成员进行。共用体变量的成员表示为: 共用体变量名.成员名 例如,a被说明为perdata类型的变量之后,可使用 a.class,a.office。不允许只用共用体变量名作赋值或其他操作。也不允许对共用体变量作初始化赋值,赋值只能在程序中进行。还要再强调说明的是,一个共用体变量,每次只能赋予一个成员值。即某一时刻一个共用体变量的值只能有共用体变量的某一个成员的值。 【例10-11】 设有一个教师与学生通用的表格,教师数据有姓名、年龄、身份标志、教研室四项。学生有姓名、年龄、职工身份标志、班级四项,编程输入人员数据,再以表格输出。 #include stdio.h main() { struct { char name[10]; int age; char job; // ‘s’代表学生,‘t’代表老师 union { int class; char office[10]; } depa; } body[2]; 10.8.3 共用体变量的赋值和使用 10.8.3 共用体变量的赋值和使用 int i; for(i=0;i2;i++) { printf(input name,age,job and department\n); scanf(%s %d %c,body[i].name,body[i].age,body[i].job); if(body[i].job==s) //s代表学生,输入班级号 scanf(%d,body[i].depa.class); else //t代表老师,输入教研室名称 scanf(%s,body[i].depa.office); } printf(nam

文档评论(0)

132****9295 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档