您好,欢迎访问三七文档
1《C语言程序设计》计算机科学学院张耀文2《C语言程序设计》–1为什么使用结构体–2如何定义结构体–3声明结构体变量–4访问结构体成员–5掌握结构作为函数参数的用法–6链表本章要点3《C语言程序设计》从基本数据类型到抽象数据类型二进制数–在早期的机器指令及汇编语言中,数据对象均用二进制数表示,没有类型的概念基本数据类型在高级语言中引入了基本数据类型:整型、实型、字符型等基本数据类型不能方便的解决所有问题,有些语言中试图规定较多的类型,如数组、树、栈等,但实践证明不是个好办法用户自己构造数据类型-复合数据类型表示复杂的数据对象,典型的代表就是“结构体”,数组、指针也可算作此类抽象数据类型(AbstractDataType,简称ADT)在复合数据类型基础上增加了对数据的操作类——跨时代的进步例如汽车就是一种ADT4《C语言程序设计》思考一个问题在程序里表示一个人(姓名、年龄、性别、……),怎么表示?想表示多个人呢?如何用计算机程序实现下述表格的管理?表8-1某学校学生成绩管理表学号姓名性别入学时间计算机原理英语数学音乐1令狐冲男1999908372822林平之男1999789288783岳灵珊女1999897298664任莹莹女1999789587905……6……5《C语言程序设计》数组的解决方法intstudentId[30];/*最多可以管理30个学生,每个学生的学号用数组的下标表示*/charstudentName[10][30];charstudentSex[2][30];inttimeOfEnter[30];/*入学时间用int表示*/intscoreComputer[30];/*计算机原理课的成绩*/intscoreEnglish[30];/*英语课的成绩*/intscoreMath[30];/*数学课的成绩*/intscoreMusic[30];/*音乐课的成绩*/6《C语言程序设计》数组的解决方法intstudentId[30]={1,2,3,4,5,6};charstudentName[10][30]={{令狐冲},{林平之},{岳灵珊},{任莹莹}};charstudentSex[2][30]={{男},{男},{女},{女}};inttimeOfEnter[30]={1999,1999,1999,1999};intscoreComputer[30]={90,78,89,78};intscoreEnglish[30]={83,92,72,95};intscoreMath[30]={72,88,98,87};intscoreMusic[30]={82,78,66,90};7《C语言程序设计》数组的解决方法数据的内存管理方式90788978……83927295……72889887……82786690……1234……令狐冲林平之岳灵珊任莹莹……男男女女……1999199919991999……8《C语言程序设计》数组的解决方法分配内存不集中,寻址效率不高对数组进行赋初值时,容易发生错位结构显得比较零散,不容易管理9《C语言程序设计》希望的内存分配图1令狐冲男1999908372822林平之男1999789288783岳灵珊女1999897298664任莹莹女19997895879010《C语言程序设计》结构体的解决方法structSTUDENT{intstudentID;/*每个学生的学号*/charstudentName[10];/*每个学生的姓名*/charstudentSex[4];/*每个学生的性别*/inttimeOfEnter;/*每个学生的入学时间*/intscoreComputer;/*每个学生的计算机原理成绩*/intscoreEnglish;/*每个学生的英语成绩*/intscoreMath;/*每个学生的数学成绩*/intscoreMusic;/*每个学生的音乐成绩*/};structSTUDENT是一个类型structSTUDENTstudents[4];students[0].studentNamestudents[0].Sex–它们都是变量,一般称为结构的成员变量11《C语言程序设计》用户自定义的数据类型结构体:–把关系紧密且逻辑相关的多种不同类型的变量组织到统一的名字之下,也称复合数据类型–这种类型的变量占用相邻的一段内存单元共用体:–把情形互斥但又逻辑相关的多种不同类型的变量组织在一起–这种类型的变量占用同一段内存单元,因此每一时刻只有一个数据起作用12《C语言程序设计》–1为什么使用结构体–2如何定义结构体–3声明结构体变量–4访问结构体成员–5掌握结构作为函数参数的用法–6链表本章要点13《C语言程序设计》结构体定义格式说明结构类型关键字1.结构体类型定义格式struct结构类型标识符{结构成员1;结构成员2;┆结构成员n;};类型可任意(不能为该结构自身)14《C语言程序设计》10010LiFunM1887.5Beijingnumnamesexagescoreaddrstructstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};structuredefinition形成一个样板,用于生成结构体变量。一般形式:struct结构体名(标识符){类型关键字成员名1;类型关键字成员名2…...类型关键字成员名n};构成结构体的变量称为结构体的成员(member),也称元素(element)或域(filed)结构体的定义只定义了数据的形式,即声明了一种复杂的数据类型,并未生成任何变量。结构体的定义举例15《C语言程序设计》定义结构体structstudent{intnum;charname[20];charsex;floatscore;};numnamesexstudent•结构定义并不预留内存•结构定义放置在程序的开始部分,位于头文件声明之后score•结构定义仅描述了一个结构的形式。如果要在程序里使用结构,需要声明结构变量。16《C语言程序设计》–1为什么使用结构体–2如何定义结构体–3声明结构体变量–4访问结构体成员(引用)–5掌握结构作为函数参数的用法–6链表本章要点17《C语言程序设计》声明结构变量structstudent{intnum;charname[20];charsex;floatscore;};structstudentstudent1,student2;I.先定义结构,再声明结构变量structstudent{intnum;charname[20];charsex;floatscore;}student1,student2;II.在定义结构类型的同时声明结构变量struct{intnum;charname[20];charsex;floatscore;}student1,student2;III.直接声明结构变量声明一个类型为student结构的变量,将会为该变量分配内存,大小是大于或等于其所有成员变量的大小之和。18《C语言程序设计》structdate{intmonth;intday;intyear;};嵌套结构struct{intnum;charname[20];charsex;structdatebirthday;floatscore;}student1,student2;表示结构变量成员的一般形式是:结构变量名.成员名例如:student1.num、student2.sex、student1.birthday.monthnumnamesexagebirthdayaddrmonthdayyear19《C语言程序设计》结构体变量的定义用typedef为已存在的类型定义新名字structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};typedefstructstudentSTUD;STUDstudent1,student2;用STUD代替structstudent类型;20《C语言程序设计》typedef另一种形式typedefstructstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}STUD;STUDstudent1,student2;21《C语言程序设计》–1为什么使用结构体–2如何定义结构体–3声明结构体变量–4访问结构体成员(引用)–5掌握结构作为函数参数的用法–6链表本章要点22《C语言程序设计》结构体指针structpoint{intx;inty;};structpointpt;/*定义结构体变量*/structpoint*ppt;/*定义结构体指针*/ppt=&pt;怎样通过pt访问pt的成员?–pt.x=0;/*成员运算符*/怎样通过ppt访问pt的成员?–(*ppt).x=0;–ppt-x=0;/*指向运算符*/–第二种更常用xypptpt23《C语言程序设计》结构体变量的使用以下3种形式等价:1)结构体变量.成员名2)(*p).成员名3)p-成员名其中-称为指向运算符。请分析以下几种运算:p-n得到p指向的结构体变量中的成员n的值。p-n++++p-n得到p指向的结构体变量中的成员n的值,用完该值后使它加1得到p指向的结构体变量中的成员n的值加1,然后再使用它24《C语言程序设计》定义:structSTUDENT{intstudentID;charstudentName[10];charstudentSex[4];structdatetimeOfEnter;intscoreComputer;intscoreEnglish;intscoreMath;intscoreMusic;};structSTUDENTstu[30];结构体数组学号姓名性别入学时间计算机原理年月日英语数学音乐25《C语言程序设计》structSTUDENT{intstudentID;charstudentName[10];charstudentSex[4];structdatetimeOfEnter;intscoreComputer;intscoreEnglish;intscoreMath;intscoreMusic;};structSTUDENTstu[30]={{1,令狐冲,男,{1999,12,20},90,83,72,82},{2,林平之,男,{1999,07,06},78,92,88,78},{3,岳灵珊,女,{1999,07,06},89,72,98,66},{4,任莹莹,女,{1999,07,06},78,95,87,90}};初始化结构体数组26《C语言程序设计》结构体数组的指针structSTUDENT*pt;pt=stu;…2…3…4…1stu[0]stu[1]stu[2]ptpt++stu[3]27《C语言程序设计》结构体变量的引用在定义了结构体变量以后,当然可以引用这个变量。但应遵守以下规则:(1)不能将一个结构体变量作为一个整体进行输入和输出例如:已定义student1和student2为结构体变量并且它们已有值。printf(“%d”,student1);成员引用如:printf(“%d”,student1.num);printf(“%f”,student1.score);28《C语言程序设计》可以整体赋值引用:structclock{inthour,minute,second;};structdate{intyear,month,day;structclocktime;}today,nextday;1.单独引用结构体变量的成员today.year=2004;today.time.second=15;2.结构体变量作为一个整体引用nextday=today;29《C语言程序设计》罗
本文标题:13-结构体
链接地址:https://www.777doc.com/doc-3060273 .html