欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    第十一章结构体与共用体.ppt

    • 资源ID:4884279       资源大小:237.51KB        全文页数:42页
    • 资源格式: PPT        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第十一章结构体与共用体.ppt

    1,第11章结构体与共用体,2,1 定义结构体类型变量的方法2 结构体变量的引用3 结构体数组4 指向结构体类型数据的指针5 共用体6 枚举类型7 用typedef定义类型,结构体与共用体,3,结构体与共用体 概述,在当代信息处理中,往往需要处理相同的属性、不同的数据类型,如:人事档案,涉及职员的描述和处理时,有职工的姓名、性别、年龄、文化程度、工资、住址等数据,其中姓名、性别、文化程度、住址属于字符型,而年龄则是整型,工资是实型,这些不同的事物都属于同一个事物(职员)所有,本身有内在的关系。为便于管理和引用,需要将这些不同类型的数据组合成一个有机的整体,这就是结构体这种类型。结构体类型定义的形式:struct 结构体名 成员表列(域表);类型名 成员名;,4,结构体与共用体 概述,例如:struct student int num;char name20;char sex;int age;float score;char addr30;struct student 是一个类型名,它和系统提供的标准类型一样,具有同样的地位和作用,都可以用来定义变量的类型,只不过结构体类型需要由用户自己指定而已。,5,定义结构体类型变量的方法,6,结构体与共用体 定义结构体类型变量的方法,结构体类型的定义只是给编译系统提供了内存分配的模式,并不分配存储空间;为了能在程序中使用结构体类型的数据,应当定义结构体类型的变量,并在其中存放具体的数据。先声明结构体类型再定义变量名:如,已定义一个结构体类型 struct student,可用它来定义变量:struct student student1,student2;结构体类型名 结构体变量名在定义了结构体变量后,系统会为之分配内存单元。将一个变量定义为标准类型(基本数据类型)与定义为结构体类型的不同之处在于,后者不仅要求指定变量为结构体类型,而且要求指定为某一特定的结构体类型。,struct student int num;char name20;char sex;int age;float score;char addr30;struct student student1,student2;,7,结构体与共用体 定义结构体类型变量的方法,在声明类型的同时定义变量:struct 结构体名 成员表列 变量名表列;直接定义结构类型变量:struct 成员表列 变量名表列;,struct student int num;char name20;char sex;int age;float score;char addr30;student1,student2;,struct int num;char name20;char sex;int age;float score;char addr30;student1,student2;,8,结构体与共用体 定义结构体类型变量的方法,关于结构体类型的说明类型与变量是不同的概念,不要混同。通过struct定义的结构体类型和int,float等有着同等的地位。只能对变量赋值、存取或运算,而不能对一个类型赋值、存取或运算。在编译时,对类型是不分配空间的,只对变量分配内存空间。对结构体中的成员(即域),可以单独使用,它的作用与地位相当于普通变量。成员也可以是一个结构体变量。成员名可以与程序中的变量名相同,二者不代表同一对象。,9,结构体与共用体 定义结构体类型变量的方法,例如:struct date int no;int month;int day;int year;int day;/错误,不能在一个结构体内重名;struct student int no;int num;char name20;char sex;int age;struct date birthday;char addr30;student1,student2;,10,观察存储的地址,#include stdio.hmain()struct date int year,month,day;struct worklist char name20;char sex;struct date birthday;person;printf(“1/%d,2/%d,3/%d,11,结构体变量的引用,12,结构体与共用体 结构体变量的引用,引用结构体变量的规则不能将一个结构体变量作为一个整体进行输入和输出。只能对结构体变量中的各个成员分别进行输入和输出。引用结构体变量中成员的方式为:结构体变量名.成员名成员(分量)运算符.在所有运算符中优先级最高。只能对最低级的成员进行赋值、存取和运算。如果成员本身又属一个结构体类型,则要用若干个成员运算符,一级一级地找到最低一级的成员。如,student1.birthday.month,13,结构体与共用体 结构体变量的引用,引用结构体变量的规则对结构体变量的成员可以象普通变量一样进行各种运算(根据其类型决定可以进行的运算)。可以引用结构体变量成员的地址,也可以引用结构体变量的地址。如,scanf(%d,结构体变量的地址主要用于作函数参数,传递结构体的地址。,14,结构体与共用体 结构体变量的初始化,对结构体变量可以在定义时指定初始值。对结构体变量进行初始化,只要把成员所对应的初始值按成员的顺序给出即可。例:main()struct student int num;char name20;char sex;char addr30;a=89031,Li Lin,M,123 Beijing Road;printf(No.:%dnName:%sn,a.num,a.name);printf(Sex:%cn,a.sex);printf(Address:%sn,a.addr);,No.:89031Name:Li LinSex:MAddress:123 Beijing Road,15,结构体数组,16,结构体与共用体 结构体数组,结构体数组的初始化结构体数组初始化的一般形式是,在定义数组的后面加上:=初值列表;如:struct student int num;stu3=10101,Li Lin,M,123 BJ Road,10102,Wang,F,12 ZS Road,10103,Zhang,M,99 SH Road;定义数组时,元素个数可以不指定,即写成如下形式:struct student stu=,;编译时,系统会根据给出初值的结构体常量的个数来确定数组元素的个数。,17,结构体与共用体 结构体数组,例:对候选人得票的统计程序。设有3个候选人,每次输入一个得票的候选人名字,要求最后输出各人得票结果。#include string.h struct person char name20;int count;leader3=Li,0,Zhao,0,Zhang,0;main()int i,j;char leader_name20;for(i=1;i=10;i+)scanf(%s,leader_name);for(j=0;j3;j+)if(strcmp(leader_name,leaderj.name)=0)leaderj.count+;printf(nn);for(i=0;i3;i+)printf(%5s:%dn,leaderi.name,leaderi.count);,18,指向结构体类型数据的指针,19,指向结构体类型变量的指针,指向结构体变量的指针一个结构体变量的指针就是该变量所占据的内存段的起始地址。指针变量也可用来指向结构体数组中的元素。C语言规定:可以把(*p).num改用p-num表示,即以下三种形式等价:结构变量.成员名(*p).成员名 p-成员名(其中-称为指向运算符),20,结构体与共用体 指向结构体类型数据的指针,例:#include string.h main()struct student long num;char name20;char sex;float score;struct student stu_1,*p;p=,No.:89101Name:Li LinSex:MScore:89.500000No.:89101Name:Li LinSex:MScore:89.500000,printf(No.:%ldnName:%sn,p-num,p-name);printf(Sex:%cnScore:%fn,p-sex,p-score);,21,结构体与共用体 指向结构体类型数据的指针,指向结构体数组的指针例:#include string.h#include stdio.h struct student int num;char name20;char sex;int age;stu3=10101,Li Lin,M,18,10102,Wang,F,19,10103,Zhang,M,20;main()struct student*p;printf(No.Name Sex Agen);for(p=stu;pnum,p-name,p-sex,p-age);,No.Name Sex Age Li Lin M 18 Wang F 19 Zhang M 20,22,结构体与共用体 指向结构体类型数据的指针,指向结构体数组的指针指向结构体数组及其元素的指针称为指向结构数组的指针。说明:设P为指向结构体数组的指针,则P+1指向下一个数组元素的起始地址;设P为指向结构体数组的指针,则P只能指向一个结构体类型的数据(数组中某一个元素的起始地址),而不能指向元素中的某一成员。,23,结构体与共用体 指向结构体类型数据的指针,用结构体变量和指向结构体的指针作函数参数将一个结构体变量的值传递给另一个函数,有3个方法:用结构体变量的成员作参数,用法和用普通变量作实参是一样的,属于值传递方式。用结构体变量作实参。采取的仍是值传递的方式,将结构体变量所占的内存单元的内容全部顺序传递给形参;形参必须是同类型的结构体变量。在函数调用期间形参也要占用内存单元。空间和时间上开销较大;若在执行被调用函数期间改变了形参的值,该值不能返回主调函数。用指向结构体变量(或数组)的指针作实参,将结构体变量(或数组)的地址传给形参。,24,结构体与共用体 指向结构体类型数据的指针,例:有一个结构体变量stu,内含学生学号、姓名和3门课的成绩。要求在main函数中赋以值,在另一函数print中将它们打印输出。#include stdio.h#include string.h#define FORMAT%dn%sn%fn%fn%fn struct student int num;char name20;float score3;void print(struct student stu)printf(FORMAT,stu.num,stu.name,stu.score0,stu.score1,stu.score2);printf(n);main()struct student stu;stu.num=12345;strcpy(stu.name,Li Lin);stu.score0=67.5;stu.score1=89;stu.score2=78.6;print(stu);,12345Li Lin67.50000089.00000078.600000,25,结构体与共用体 指向结构体类型数据的指针,例:将上题改用指向结构体变量的指针作实参。#include string.h#include stdio.h#define FORMAT%dn%sn%fn%fn%fn struct student int num;char name20;float score3;stu=12345,Li Lin,67.5,89,78.6;main()void print(struct student*);print(,12345Li Lin67.50000089.00000078.600000,26,结构体与共用体 用指针处理链表,27,结构体与共用体 用指针处理链表,链表概述链表的数据结构,必须利用指针变量才能实现。即:一个结点中应包含一个指针变量,用它存放下一结点的地址。用结构体变量作链表中的结点。在结构体变量中,一个指针类型的成员既可以指向其他类型的结构体数据,也可以指向自己所在的结构体类型的数据,用这种方法就可以建立链表。例:struct student int num;float score;struct student*next;,28,结构体与共用体 用指针处理链表,例:建立一个如上图所示的简单链表,它由3个学生数据的结点组成。输出各结点中的数据。#include stdio.h#define NULL 0 struct student int num;float score;struct student*next;main()struct student a,b,c,*head,*p;a.num=1001;a.score=89.5;b.num=1002;b.score=90;c.num=1006;c.score=85;head=,29,共用体,30,结构体与共用体 共用体,共用体的概念共用体是使几个不同的变量共占同一段内存的结构。共用体类型变量的定义:union 共用体名 成员表列 变量表列;或:union 共用体名 成员表列;union 共用体名 变量表列;,union data int i;char ch;float f;a,b,c;,union int i;char ch;float f;a,b,c;,union data int i;char ch;float f;union data a,b,c;,31,结构体与共用体 共用体,共用体的概念共用体与结构体的比较,定义形式上相似,但含义却不同:结构体变量所占内存长度是各成员所占的内存长度之和;共用体变量所占内存长度等于最长的成员的长度。只有先定义了共用体变量才能引用它,而且不能引用共用体变量,而只能引用共用体变量中的成员。,32,结构体与共用体 共用体,共用体类型数据的特点同一个内存段可以用来存放几种不同类型的成员,但在每一瞬时只能存放其中一种,而不是同时存放几种;共用体变量中起作用的成员是最后一次存放的成员,即共用体变量的当前值;共用体变量的地址和它的各成员的地址是同一地址;不能以共用体变量名作操作对象,不能对它赋值,不能引用它来得到一个值,也不能在定义共用体变量时对它初始化,只能对其成员进行操作;不能把共用体变量作函数参数,也不能使函数带回共用体变量,但可以使用指向共用体变量的指针;共用体类型与结构体类型也可以互相嵌套。,33,观察存储的地址,#include stdio.hmain()struct date int year,month,day;union worklist char name20;char sex;struct date birthday;person;printf(“1/%d,2/%d,3/%d,34,结构体与共用体 共用体,main()int n,i;for(i=0;i2;I+)scanf(%d%s,35,枚举类型,36,结构体与共用体 枚举类型,枚举类型的概念枚举是指将变量的值一一列举出来,枚举变量的值只限于列举出来的值的范围内。实质上是一个整型常量的集合。枚举类型变量的定义:enum 枚举名枚举表 变量表列;或:enum 枚举名枚举表;enum 枚举名 变量表列;例,enum weekdaysun,mon,tue,wed,thu,fri,sat;enum weekday workday,week_end;或:enum sun,mon,tue,wed,thu,fri,satworkday,week_end;枚举元素是用户定义的标识符,所代表的含义完全由程序员决定,并在程序中作相应处理。,37,结构体与共用体 枚举类型,枚举类型的说明在C编译中,对枚举元素按常量处理,均称枚举常量;C语言编译系统对枚举元素的处理,实际上是把它当作常数处理,编译系统自动按顺序使它们的值为0,1,2枚举值可以用来作判断比较,比较规则按其在定义时的顺序号比较;一个整数不能直接赋给一个枚举变量,但可通过强制类型转换赋值。,38,结构体与共用体 枚举类型,例:口袋中有红、黄、蓝、白、黑5种颜色的球若干个。每次从口袋中先后取出3个球,问得到3种不同色的球的可能取法,打印出每种排列的情况。#include stdio.h“main()enum color red,yellow,blue,white,black;enum color i,j,k,pri;int n=0,loop;for(i=red;i=black;i+)for(j=red;j=black;j+)if(i!=j)for(k=red;k=black;k+)if(k!=i),39,结构体与共用体 枚举类型,for(loop=1;loop=3;loop+)switch(loop)case 1:pri=i;break;case 2:pri=j;break;case 3:pri=k;break;default:break;switch(pri)case red:printf(%-10s,red);break;case yellow:printf(%-10s,yellow);break;case blue:printf(%-10s,blue);break;case white:printf(%-10s,white);break;case black:printf(%-10s,black);break;default:break;printf(n);printf(nTotal:%5dn,n);,40,用typedef定义类型,41,用typedef定义类型,C语言已经有丰富的类型定义的语句,但是为了使设计的程序有更好的可移植性和可扩充性,也便于阅读和理解,C语言还提供了引用新的数据类型标识符的功能,这种功能不是产生新的数据类型,只是已有数据类型的代名词,它本身也不分配存储空间。定义一个新类型名的方法(仅仅是增加一个名称并非创造一个新的类型):先按定义变量的方法写出定义体;将变量名换成新类型名;在最前面加 typedef;然后可以用新类型名去定义变量。,42,typedef int INTEGER;typedef float REAL;typedef int NUM20;typedef char*STRING;typedef struct int month;int day;int year;DATE;,用typedef定义类型,INTEGER i,j;REAL r;NUM n;STRING s;DATE d;,

    注意事项

    本文(第十一章结构体与共用体.ppt)为本站会员(sccc)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开