c语言程序设计(王勇)第14章结构体共用体和用户定义类型-海贝.ppt

上传人:wuy****n92 文档编号:70106988 上传时间:2023-01-16 格式:PPT 页数:30 大小:571KB
返回 下载 相关 举报
c语言程序设计(王勇)第14章结构体共用体和用户定义类型-海贝.ppt_第1页
第1页 / 共30页
c语言程序设计(王勇)第14章结构体共用体和用户定义类型-海贝.ppt_第2页
第2页 / 共30页
点击查看更多>>
资源描述

《c语言程序设计(王勇)第14章结构体共用体和用户定义类型-海贝.ppt》由会员分享,可在线阅读,更多相关《c语言程序设计(王勇)第14章结构体共用体和用户定义类型-海贝.ppt(30页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第 14 章 结构体与共用体和用户定义类型第 一 节 用户定义类型用户自定义类型功能:用自定义名字为已有数据类型命名类型定义简单形式:typedef type name;例 typedef int INTEGER;类型定义语句关键字已有数据类型名用户定义的类型名例 typedef float REAL;类型定义后,与已有类型一样使用例 INTEGER a,b,c;REAL f1,f2;int a,b,c;float 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;namenumsexagescoreaddr2字节2字节20字节1字节4字节30字节.结构体类型定义描述结构的组织形式,不分配内存二、结构体变量

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

4、loat 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 sc4;STREC;STREC

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

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

7、char sex;int age;float score;char addr30;stu1,stu2;stu1.num=10;stu1.score=85.5;stu1.score+=stu2.score;stu1.age+;例 struct student int num;char name20;char sex;int age;float score;char addr30;stu1,stu2;printf(“%d,%s,%c,%d,%f,%sn”,stu1);()stu1=101,“Wan Lin”,M,19,87.5,“DaLian”;()例 struct student int num

8、;char name20;char sex;int age;float score;char addr30;stu1,stu2;stu2=stu1;()例 struct student int num;char name20;char sex;int age;float score;char addr30;stu1,stu2,*p;p=&stu2if(stu1.age=(*p).age)stu1.score=p-score说明:1.不能整体引用,只能引用变量成员3.结构体嵌套时逐级引用例 struct student int num;char name20;struct date int mo

9、nth;int day;int year;birthday;stu1,stu2;numnamebirthdaymonthdayyearstu1.birthday.month=12;例 struct student int num;char name20;char sex;int age;float score;char addr30;stu1,stu2;if(stu1=stu2).()不能写成*ps.sex,因.运算符的级别高五、结构体数组struct student int num;char name20;char sex;int age;struct student stu2;numnam

10、esexagenumnamesexagestu0stu125B结构体数组初始化例 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 name20;char sex;int age;stu=,;分行初始化:struct s

11、tudent 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 name20;char sex;int age;stu3;stu1.age+;strcpy(stu0.name,”ZhaoDa”);例#include stdio.hmain()struct stu int i;char c;flo

12、at f;x=50,A,3.25,*ps;ps=&x;printf(n%d,%c,%f,(*ps).i,x.c,ps-f);printf(“n%d,%c,%f”,(*ps-i)+,(*ps).i);六、函数之间结构体变理的数据传递1.向函数传递结构体变量的成员(值传递)2.向函数传递整个的结构体变量(值传递)(1)通过实参向函数中的形参传递数据时,所传递的是各个成员的值。(2)使用结构体传递数据影响程序执行效率(3)形参中各个成员的变化不会影响到实参3.向函数传递结构体变量的地址(1)形参应该是类型相同的结构体类型指针(2)系统只需开辟一个单元用于存放变量地址举例:typedef struct

13、 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七、利用结构体变量构成链表40488910894.5NULL4016891059130288910290.5&c&bhead&a结点结点若有下列格式的结构体struct linklong num;float cj;struct link *p;st

14、u a,b,c;numcjp&c&b&a链表的概念:链表的概念:若干个结点按一定的原则连接起来形成的链。链表的连接原则:链表的连接原则:(1)前一个结点“指向下一个结点,通过前一个 结点才能找到下一个结点;(2)第一个结点的设置:设置一个“头指针”,使它指向第一个结点;(3)最后一个结点的设置:为避免数据写入错误,应不指向有用地址,通常指向零地址(NULL)链表中各结点在内存中并不是占连续的一片内存单元。struct student int num;float cj;stuct student*next;st1,st2,st3,*head;main()st1.num=89101;st1.cj=

15、89.5;st2.num=89102;st2.cj=90;st3.num=89103;st3.cj=94;head=&st1;st1.next=&st2;st2.next=&st3;st3.next=NULL;st38910394 st28910290st18910189.5&st3&st2head studentint numfloat cj*next&st1NULLNULL94 89108404890891054016 89.589102302840484016删除一个结点的过程删除一个结点的过程4048sancu()st1.next=st2.next;st1 st2 st3head302

16、8NULL94.589108404891891054016 90.5891023028404840163028head增加一个结点的过程增加一个结点的过程80798910388.5 40168079为此需要设置两个指针,一个指向查找的结点,一个指向其前一个结点。通过 p2=p1,p1=p1-next向后移动指针p1p2例:例:顺序输出单向链表各结点数据域中的内容顺序输出单向链表各结点数据域中的内容void print_slist(SLIST *head)SLIST *p;p=head-next;if(p=0)printf(“Linklist is null!);else printf(“hea

17、d”);do printf(“-%d”,p-data);p=p-next;while(p!=0);printf(“-endn”);第三节 共用体(联合体)union 共用体名 类型标识符 成员名;类型标识符 成员名;.;例 union data short i;char ch;float f;fchi类型定义不分配内存特征:使几个不同类型的变量共占一段内存(相互覆盖)定义形式:形式一: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;形式三:u

18、nion short i;char ch;float f;a,b,c;共用体变量的定义fchifchiab共用体变量定义分配内存,长度=最长成员所占字节数共用体变量任何时刻只有一个成员存在共用体变量引用例 a.i=1;a.ch=a;a.f=1.5;printf(“%d”,a.i);(编译通过,运行结果不对)v引用规则l不能引用共用体变量,只能引用其成员共用体指针名-成员名共用体变量名.成员名(*共用体指针名).成员名union data int i;char ch;float f;union data a,b,c,*p,d3;a.i a.ch a.fp-i p-ch p-f(*p).i (*p

19、).ch (*p).fd0.i d0.ch d0.fl共用体变量中起作用的成员是最后一次存放的成员例 union int i;char ch;float f;a;a=1;()l不能在定义共用体变量时初始化例 union int i;char ch;float f;a=1,a,1.5;()l可以用一个共用体变量为另一个变量赋值例 float x;union int i;char ch;float f;a,b;a.i=1;a.ch=a;a.f=1.5;b=a;()x=a.f;()例 将一个整数按字节输出01100001 01000001低字节高字节0100000101100001ch0ch1运行结

20、果:i=60501ch0=101,ch1=141ch0=A,ch1=amain()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);结构体与共用体v区别:存储方式不同struct node char ch2;short k;a;union node char ch2;short k;b;achkbch k变量的各成员同时存在任一时刻只有一个成员存在v联系:两者可相互嵌套补 枚举类型数据一、枚

21、举类型数据的概念 所谓枚举型数据类型是指这种类型只能是所定义的若干个名字之一。例: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 34.玫举常量可以比较,其大小由其所处的位置决定。例:if(color=red)printf(“red”);if(color!=black)printf(“not black”);if(color white)printf(“it is black”);5.枚举变量的值只能是枚举常量之一,可以将枚举常量赋给一个枚举变量.但不能将一个整数赋给它.Color=black;/*正确*/Color=2;/*错误*/6.枚举常量不是字符串,不能用%s输出。7.枚举变量可作为循环变量。color+表示按顺序变化。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com