C程序设计 第9章 结构体与共用体.ppt

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第9章 结构体与共用体 将不同类型的数据组合成一个有机的整体。C语言允许用户自定义结构体类型。 struct 结构体名 {成员表列};/*各成员分别进行类型声明*/ 例:struct student { int num; char name[20]; char sex; int age; };/*定义结构体类型 struct student*/ 定义了结构体类型后,就可以定义相应类型的变量,并在其中顺序存放具体的数据,存贮长度为各成员长度之和。 例:struct student stu1,stu2; 结构体成员的引用 成员运算符. 优先级为1级,左结合。 例:stu1.num,stu2.name 注意 (1)类型为概念(框架),变量要分配具体存储空间。 (2)结构体中成员可单独使用,相当于普通变量。 (3)成员也可以是结构体变量。 (4)成员名可以和普通变量名相同,二者代表不同对象。 初始化及输入/输出 例:struct student stu1={30,Liu de hua,M,20}; 不能对结构体变量作为一个整体进行输入或输出,因为格式字符都是针对基本类型的,应对各成员分别输入或输出。 例:printf(%d,%s,%c,%d\n,stu1.num,stu1.name,stu1.sex,stu1.age); scanf(%d%s%c%d,stu2.num,stu2.name,stu2.sex,stu2.age); 结构体数组 如果需要了解一个班学生的基本情况,则应采用结构体数组。 struct 结构体名 数组名[长度]; struct student stu[2];/*2个元素,student类型。*/ struct student stu[2]={{1,Wang,M,20},{2,Li,F, 21}}; 结构体指针 结构体变量的指针即该变量起始地址。 struct 结构体名 *变量名; 例:struct student stu1={1,“Wang”,‘M’,20},*p=stu1; stu1.num等价于(*p).num。为使用方便、直观,推出指向运算符-,其优先级为1级,左结合。(*p).num可用p-num代替,表示引用p所指结构体变量的num成员。 注意 (1)结构体变量、成员、结构体指针均可作为函数实参,用指针效率较高。 (2)指针类型不同,不得互相赋值。如p指向leader[0],与leader[0].num的地址相同,但类型不同。p是结构体类型指针,而leader[0].num的指针类型是整型。 (3)指针的指向需关注,q=p如放在外层循环作初值会出错。 共用体 有时需要使几种不同类型的变量存放到同一段内存单元中。 union 共用体名 /*定义共用体类型*/ {成员表列}; 例: union data {int i; char ch; }; 定义类型之后,即可定义变量。 union data a; 引用: a.i,a.ch 共用体数据特点 (1)每一时刻只有一个成员起作用,起作用的是最近存放的成员。 (2)共用体变量与成员地址相同。 (3)不能对共用体变量赋值、初始化,也不能作函参、函数返回值,但可以使用指针来完成。 (4)共用体、结构体类型可相互嵌套。 与结构体区别 结构体变量各成员同时存在,顺序存放,其长度为各成员长度之和。 共用体变量各成员同一时刻只有一个成员存在,其长度取决于最长成员的长度。 枚举类型 如果一个变量只取有限个数的值,则可定义为枚举类型。变量的值只限于列举出来的值的范围内。 例:enum color{red,yellow,blue};/*enum color类型*/ enum color i;/*i为枚举型变量,取值是三者之一*/ typedef 用typedef声明别名来代替已有类型名。 例:typedef int INT;/*用INT代表int型*/ int i,j;等价于INT i,j; (1)习惯上把用typedef声明的类型名用大写字母表示,以便与已有类型区别。 (2)typedef只是对已有类型声明一个类型名,而没有创造新类型。 (3)与#define区别在于是在编译时处理。 (4)使用typedef利于程序通用与移植。

您可能关注的文档

文档评论(0)

勤能补拙 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档