c语言程序设计(王勇)第14章结构体共用体和用户定义类型-海贝_第1页
c语言程序设计(王勇)第14章结构体共用体和用户定义类型-海贝_第2页
c语言程序设计(王勇)第14章结构体共用体和用户定义类型-海贝_第3页
c语言程序设计(王勇)第14章结构体共用体和用户定义类型-海贝_第4页
c语言程序设计(王勇)第14章结构体共用体和用户定义类型-海贝_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第 14 章 结构体与共用体和用户定义类型,第 一 节 用户定义类型,用户自定义类型 功能:用自定义名字为已有数据类型命名 类型定义简单形式: typedef type name;,例 typedef int INTEGER;,类型定义语句关键字,已有数据类型名,用户定义的类型名,例 typedef float REAL;,类型定义后,与已有类型一样使用,例 INTEGER a,b,c; REAL f1,f2;,说明: 1.typedef 没有创造新数据类型 2.typedef 是定义类型,不能定义变量 3.typedef 与 define 不同,第 14 章 结构体与共用体和用户定义类型,第

2、 一 节 用户定义类型,第二节 结构体类型,概述: 结构体是一种构造数据类型 用途:把不同类型的数据组合成一个整体,struct 结构体名 类型标识符 成员名; 类型标识符 成员名; . ;,成员类型可以是 基本型或构造型,struct 是关键字, 不能省略,合法标识符 可省:无名结构体,一、结构体类型定义(说明),例 struct student short num; char name20; char sex; short age; float score; char addr30; ;,结构体类型定义描述结构 的组织形式,不分配内存,二、 结构体变量的定义,1. 先定义结构体类型,再定义

3、结构体变量,struct student int num; char name20; char sex; int age; float score; char addr30; ; struct student stu1,stu2;,#define STU struct student STU int num; char name20; char sex; int age; float score; char addr30; ; STU stu1,stu2;,2. 定义结构体类型的同时定义结构体变量,struct student int num; char name20; char sex; i

4、nt age; float score; char addr30; stu1,stu2;,3. 直接定义结构体变量,struct int num; char name20; char sex; int age; float score; char addr30; stu1,stu2;,用无名结构体直接定义 变量只能一次,struct 类型标识符 成员名; 类型标识符 成员名; . 变量名表列;,4. 先用typedef说明一个结构体类型名, 再用新类型名来定义变量,typedef struct char name12; char sex; struct date birthday; float

5、 sc4; STREC; STREC std, pers3, *pstd,struct date int year; int mouth; int day; ;,说明:,1. 结构体类型与结构体变量概念不同,结构体类型 结构体变量 不分配内存; 分配内存 不能赋值、存取、运算; 可以,2. 结构体成员名与程序中变量名可相同,不会混淆,3. 结构体可嵌套,三、 结构体变量的初始化,struct 结构体名 类型标识符 成员名; 类型标识符 成员名; . ; struct 结构体名 结构体变量=初始数据;,例 struct student int num; char name20; char sex

6、; int age; ; struct student stu1=112,“Wang Lin”,M,19;,初始化时不允许跳过前面的成员给后面的成员赋值,但可以只给前面的成员赋值,后面未赋值的数值数据按0处理,字符数据按0,字符串数据按空串处理。,四、结构体变量的引用,2. 可以将一个结构体变量赋值给另一个结构体变量,引用方式:(1) 结构体变量名.成员名 (2) 指针变量名-成员名 (3) (*ps).sex,说明:1. 不能整体引用,只能引用变量成员,3. 结构体嵌套时逐级引用,不能写成 *ps.sex, 因 . 运算符的级别高,五、结构体数组,struct student int num

7、; char name20; char sex; int age; ; struct student stu2;,结构体数组初始化,例 struct int num; char name20; char sex; int age; stu =,;,顺序初始化: struct student int num; char name20; char sex; int age; ; struct student stu =100,“Wang Lin”,M,20, 101,“Li Gang”,M,19, 110,“Liu Yan”,F,19;,例 struct student int num; char

8、 name20; char sex; int age; stu =,;,结构体数组引用,引用方式: 结构体数组名下标.成员名,例,#include stdio.h main() struct stu int i; char c; float f; x=50,A,3.25,*ps; ps= ,六、函数之间结构体变理的数据传递,1. 向函数传递结构体变量的成员(值传递),2. 向函数传递整个的结构体变量(值传递),(1)通过实参向函数中的形参传递数据时, 所传递的是各个成员的值。 (2)使用结构体传递数据影响程序执行效率 (3)形参中各个成员的变化不会影响到实参,3. 向函数传递结构体变量的地址,

9、(1) 形参应该是类型相同的结构体类型指针,(2) 系统只需开辟一个单元用于存放变量地址,举例:,typedef struct int a; char b; ST; ST fun(ST x) x.a=99; x.b=S; return x; main() ST y; y.a=0; y.b=A; printf(n y.a=%d, y.b=%c,y.a, y.b); y=fun(y); printf(n y.a=%d, y.b=%c,y.a, y.b); ,运行结果: y.a=0, y.b=A y.a=99 y.b=S,七、利用结构体变量构成链表, float cj; struct link *p

10、; stu a,b,c;,(2)第一个结点的设置: 设置一个“头指针”,使它指向第一个结点;,(3)最后一个结点的设置: 为避免数据写入错误,应不指向有用地址, 通常指向零地址(NULL),链表中各结点在内存中并不是占连续的一片内存单元。,struct student int num; float cj; stuct student *next; st1,st2,st3,*head;,main() st1.num=89101; st1.cj=89.5; st2.num=89102; st2.cj=90; st3.num=89103; st3.cj=94; head= , ,st1 st2 st

11、3,增加一个结点的过程,4016,8079,为此需要设置两个指针,一个指向查找的结点,一个指向其前一个结点。通过 p2=p1, p1=p1-next向后移动指针,例: 顺序输出单向链表各结点数据域中的内容,void print_slist(SLIST *head) SLIST *p; p=head-next; if (p=0) printf(“Linklist is null!); else printf(“head”); do printf(“-%d”, p-data); p=p-next; while (p!=0); printf(“-endn”); ,第三节 共用体(联合体),union

12、 共用体名 类型标识符 成员名; 类型标识符 成员名; . ;,例 union data short i; char ch; float f; ;,类型定义不分配内存,特征:使几个不同类型的变量共占一段内存(相互覆盖),定义形式:,形式一: union data short i; char ch; float f; a,b;,形式二: union data short i; char ch; float f; ; union data a,b,c,*p,d3;,形式三: union short i; char ch; float f; a,b,c;,共用体变量的定义,共用体变量定义分配内存,

13、长度=最长成员所占字节数,共用体变量任何时刻 只有一个成员存在,共用体变量引用,例 a.i=1; a.ch=a; a.f=1.5; printf(“%d”,a.i); (编译通过,运行结果不对),引用规则 不能引用共用体变量,只能引用其成员,共用体变量中起作用的成员是最后一次存放的成员,例 union int i; char ch; float f; a; a=1; (),不能在定义共用体变量时初始化,例 union int i; char ch; float f; a=1,a,1.5; (),可以用一个共用体变量为另一个变量赋值,例 float x; union int i; char ch

14、; float f; a,b; a.i=1; a.ch=a; a.f=1.5; b=a; () x=a.f; (),例 将一个整数按字节输出,运行结果: i=60501 ch0=101,ch1=141 ch0=A,ch1=a,main() union int_char short int i; char ch2; x; x.i=24897; printf(i=%on,x.i); printf(ch0=%o,ch1=%on ch0=%c,ch1=%cn, x.ch0,x.ch1,x.ch0,x.ch1); ,结构体与共用体 区别: 存储方式不同,联系: 两者可相互嵌套,补 枚举类型数据,一、枚举

15、类型数据的概念,所谓枚举型数据类型是指这种类型只能是所定义的若干个名字之一。,例: enum color red , yellow , white =10, black ; enum color x , y ; x=yellow ; /*正确*/ x=blue; /*错误*/,二、说明,1. 花括号中的一些名字是程序设计者自己指定的,命名规则与标识符相同。这些名字无固定的含义,只是一个符号。不是变量, 不能进行赋值。 red=3 ; /*是错误的*/,2. 可以在定义类型时给枚举常量初始化 (例上面的 white=10),3. 花括号中的符号是有值的,其值是其所处的位置。 各名字分别代表 0, 1, 2, 3, 4,例: red yellow white black 0 1 2 3,4. 玫举常量可以比较 , 其大小由其所处的位置决定。,例: if (c

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论