C语言程序设计 教学课件 ppt 作者 吴赟婷 卢钢 第9章 结构体和共用体介绍

上传人:E**** 文档编号:89390569 上传时间:2019-05-24 格式:PPT 页数:39 大小:586KB
返回 下载 相关 举报
C语言程序设计 教学课件 ppt 作者 吴赟婷 卢钢 第9章 结构体和共用体介绍_第1页
第1页 / 共39页
C语言程序设计 教学课件 ppt 作者 吴赟婷 卢钢 第9章 结构体和共用体介绍_第2页
第2页 / 共39页
C语言程序设计 教学课件 ppt 作者 吴赟婷 卢钢 第9章 结构体和共用体介绍_第3页
第3页 / 共39页
C语言程序设计 教学课件 ppt 作者 吴赟婷 卢钢 第9章 结构体和共用体介绍_第4页
第4页 / 共39页
C语言程序设计 教学课件 ppt 作者 吴赟婷 卢钢 第9章 结构体和共用体介绍_第5页
第5页 / 共39页
点击查看更多>>
资源描述

《C语言程序设计 教学课件 ppt 作者 吴赟婷 卢钢 第9章 结构体和共用体介绍》由会员分享,可在线阅读,更多相关《C语言程序设计 教学课件 ppt 作者 吴赟婷 卢钢 第9章 结构体和共用体介绍(39页珍藏版)》请在金锄头文库上搜索。

1、,第9章,结构体与共用体介绍,9.1 结构体类型介绍 9.2 结构体变量作为函数参数 及返回结构体类型值的函数 9.3 用指针处理链表 9.4 共用体 9.5 枚举类型 9.6 用typedef定义类型,9.1.1结构体类型的定义,C语言的数据类型: 基本类型int 、 char 、 float 、double 指针类型 构造类型数组、结构体、共用体、枚 举类型 空 类 型 void,结构体类型是由不同类型的数据组成的集合体,组成结构体类型的每一个数据称为该结构体类型的一个成员。对结构体数据的操作是通过引用结构体成员来实现的,结构体的应用为处理复杂的数据结构提供了有利的手段。定义结构体类型的一

2、般形式如下: struct 结构体类型名 结构体成员表;,上表中的项目,可用以下结构体类型表示,struct student int num; char name10; char sex; int age; float score; 定义一个结构体类型,即告诉系统它由哪些类型的成员构成,各占多少字节,各按什么形式存储,且把它们当作一个整体来处理。此时,并不具体分配内存单元。,9.1.2结构体变量的定义,1.先定义结构体类型后定义变量 struct student int num; char name10; char sex; int age; float score; ; struct stu

3、dent stu1; 此时会给变量stu1分配的字节数是结构体内所有成员的字节数之和,占23个字节的存储空间。,2.定义结构体类型的同时定义变量 struct student long num; char name10; char sex; int age; float score; stu1; 3.直接定义结构体类型变量 struct long num; char name10; char sex; int age; float score; stu1;,结构体还可以嵌套定义。在定义结构体类型时,若结构体中的成员也是一个结构体,便构成结构体类型的嵌套。例如表 可以用如下结构体类型表示: st

4、ruct student int num; char name20; char sex; struct date int year; int month; int day; birth ; float score; ;,9.1.3 结构体变量的引用,结构体成员引用一般有三种形式。 1.用结构体成员运算符“.”形式: 结构体变量名.成员名 2.用指针的方式 定义一个结构体指针,使该指针指向结构体变量,只是就可以用指针和成员名来引用结构体成员,形式如下: (*指针名).结构成员名或者指针名-结构体成员名,例如访问结构体变量stu1中的各个成员,应将它们分别表示为: struct student i

5、nt num; char name10; char sex; int age; float score; stu1 ,*p;,p= printf(“%d”,p-num),对嵌套结构体变量的引用要从外层到内层依次列出各层结构体成员名,并且要用“.”运算符。例如以下题目: struct student int num; char name20; char sex; struct date int year; int month; int day; birth ; float score; stu; 变量stud1各成员表示为: stu.birth.year=1982; stu.birth. mon

6、th=6; stu.birth.day=1;,9.2.1 结构体变量作为函数参数 将一个结构体变量传递给另一个函数,一般有以下三种方法:,(1)用结构体变量的成员作参数。用法和普通变量作实参是一样的,属于“按值传递”方式,要注意的是实参和形参的类型应该一致。 【例1】用结构体变量的成员作参数。 #include struct STU char name10; int num; ; void f1(int c) c=2042; void main( ) struct STU a=“YangSan“,2041; f1(a.num); printf(“%dn“,a.num); ,(2)用结构体变量作

7、实参。采取的也是“按值传递”的方式,将结构体变量所占的内存单元的内容传递给形参,形参也必须是同类型的结构体变量。这种传递方式在空间和时间上开销较大,一般比较少用这种方法。 【例2】用结构体变量作实参。 #include struct STU char name10; int num; ; void f1(struct STU c) c.num=2042; void main( ) struct STU a=“YangSan“,2041; f1(a); printf(“%dn“,a.num); ,(3)用指向结构体变量的指针作实参,将结构体变量的地址传递给形参,采用的是“按址传递”的方式。 【例

8、3】用结构体变量的地址作实参。 #include #include struct STU char name10; int num; ; void f1(struct STU *c) strcpy(c-name,“Liguo“); c-num=2042; void main( ) struct STU a=“YangSan“,2041; f1( ,9.2.2 结构体类型函数,结构体函数定义的一般形式如下: struct 结构体名 函数名(形参表) 函数体; return (结构体变量); ;,#include #include struct st char str20; int x; floa

9、t y; ; main() struct st rv; struct st fun(); rv=fun(); printf(“rv:%s%d %f”,rv.str,rv.x,rv.y); ,例,结构体类型的函数。,struct st fun() struct st tst; strcpy(tst.str,”tst str”); tst.x=55; tst.y=156.7; printf(“tst:%s%d%fn”,tst.str,tst.x,tst.y); return(tst); ,9.3.1 链表的基本概念,链表: 是指若干个数据项(每个数据项称为一个“结点”)按一定的原则连接起来。每个数

10、据项都包含有若干个数据和一个指向下一个数据项的指针,依靠这些指针将所有的数据项连接成一个链表。,数据域 指针域,1620,head,李为,2004101,85,0586,数据项A,数据项C,刘娜,2004102,93,3818,数据项B,张三,2004125,95,NULL,1620,0586,3818,一个简单链表示例:,2.链表的基本操作,建立链表 删除结点 根据一定的条件,删除一个或多个结点 插入结点 - 根据一定的条件,把新结点插入到指定位置 查找结点,例:建立一个链表,存放数据。我们假设数据中只有学号和成绩两项。可编写一个建立链表的函数creat()。 stu *creat(int

11、n) stu *head,*pf,*pb; int i; for(i=0;inum, ,struct st int num; int score; struct st *next; ; typedef struct st stu;,链表的删除操作,.,., p-next = q-next;, free(q);, q = p-next;, if(p-next满足删除条件),例:在建好的链表中,删除指定结点。可编写一个删除节点的函数del()。 struct st *del(struct st *h,int num) struct st *p,*q; if(h=NULL) printf(“链表不存

12、在”);goto end; p=h; while(num!=p-num ,链表的插入操作,.,., p-next = q;, q = malloc(sizeof (struct node); q-data = x;, if(p满足插入条件), q-next = p-next;,例:将一个结点插入到一个已建好的链表中。可看创建插入函数insert()。 struct st *insert(struct st h, struct st *stu) struct st *p1,*p2,*p3; p1=stu; /*使p1指向要插入的结点*/ p2=h; /*使p2指向第一个结点*/ if(h=NUL

13、L) h=p1;p1-next=NULL; else while(p1-nump2-num),链表的删除操作,.,., p-next = q-next;, free(q);, q = p-next;, if(p-next满足删除条件),9.3.2处理动态链表的函数,1.malloc 函数 函数原型如下: void *malloc(unsigned int size); 其作用是在内存的动态存储区中分配一个长度为size的连续空间。此函数的返回值是一个指向该连续空间的起始地址的指针。当函数未能成功分配存储空间(如内存空间不足),则返回空指针(NULL)。 2.calloc 函数 函数原型如下:

14、void *callloc(unsigned n,unsigned size); 其作用是在内存的动态存储区中分配n个长度为size的连续空间。函数返回一个指向分配域起始地址的指针。当函数未能成功执行,则返回空指针(NULL)。 3.free 函数 函数原型如下: void free (void *p); 其作用是释放由p指向的内存区,使这部分内存区能够被其他变量使用,p是最近一次调用malloc 函数或者是calloc函数时的返回值。free函数没有返回值。,9.4 共用体,1.共用体的定义 共用体定义的一般形式如下: union 共用体名 数据类型1 成员1名; 数据类型2 成员2名; 数

15、据类型n 成员n名; 例如: union data int a; char b; float c;; 使用共用体要注意以下几点: (1)每个成员都是从第一字节开始连续存放,同一段内存可以用来存放几种不同类型的成员,但在每一瞬时只能存放其中一种类型的成员,而不是同时存放。 (2)占用字节数等于占用内存最多的成员占用的字节数。 (3)共用体变量中起作用的成员是最后一次存放的成员,在存入下一个新成员后,原来的成员就失去作用。,2.共用体变量的定义及引用 共用体变量引用的一般形式: 共用体名 变量名; 例如: union data int a; char b; float c; i,j; 共用体变量的引用的一般形式: 共用体变量名.成员名; 变量都必须先定义后引用,共用体变量也不例外。但共用体变量不能直接引用,而是引用共用体变量中的成员。例如上述共用体变量有i,j两个,下面的引用方式才是正确的: i.a(引用共用体变量中的成员a)。,9.5 枚举类型,“枚举”(enumeration 列举)是指将变量的值一一列举出来,变量的取值只限于被列举出来的值的范围内。 定义的一般

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

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号