(6.40)-第39课(9.1节-结构体的定义与使用)_第1页
(6.40)-第39课(9.1节-结构体的定义与使用)_第2页
(6.40)-第39课(9.1节-结构体的定义与使用)_第3页
(6.40)-第39课(9.1节-结构体的定义与使用)_第4页
(6.40)-第39课(9.1节-结构体的定义与使用)_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

结构体的定义和使用结构体和共同体在程序里表示一个人的信息(姓名、年龄、性别、……),怎么表示?表示多个人呢?如何用计算机程序实现下述表格的管理?某学校学生成绩管理表学号姓名性别C语言程序设计英语数学1小明男9083722小丽女7892883小红女8972984小强男7895875……问题使用数组intid[4]={1,2,3,4};

//存放学号Charname[4][10]={"小明","小丽","小红","小强"};//存放姓名Charsex[4][2]={"男","女","女","男"};//存放性别intscore_c[4]={90,78,89,78};//存放C语言成绩intscore_english[4]={83,92,72,95};//存放英语成绩intscore_math[4]={72,88,98,87};//存放数学成绩使用数组数据的内存管理方式83927295……72889887……1234……小明小丽小红小强……男女女男女……90788978……分配内存不集中,寻址效率不高对数组进行赋初值时,容易发生错位结构显得比较零散,不容易管理使用数组缺点希望的内存分配图1小明男9083722小丽女7892883小红女8972984小强男789587

上述数据互相独立又相互关联,如:均与学号和姓名关联。需要将其组合成一个有机的整体,C语言可以将由不同类型数据组成的这种数据结构组织成一个组合项,称为结构体(structure)结构体结构体是一种构造数据类型。与其他高级语言中的“记录”类似定义:由相互关联的不同数据类型的数据组成的有机整体用途:为处理复杂的数据结构提供了手段。为函数间传递不同类型的参数提供了便利声明结构体类型struct

[结构体名]{

类型标识符成员名1;类型标识符成员名2;

…………….};成员类型可以是基本类型或构造类型struct是关键字,不能省略合法的标识符名注意:这只是声明一种数据类型,并没有定义变量;不能省略例struct

student{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};

定义结构体类型变量的方法声明结构体类型时不分配存储单元,使用该类型定义变量时才分配存储单元。定义变量的方法有三种struct结构体名{类型标识符成员名;类型标识符成员名;

…………….};struct结构体名变量名表列;

先声明结构体类型,再定义结构体变量先声明结构体类型,再定义结构体变量struct

student{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};

structstudentstu1,stu2;声明结构体类型定义结构体变量真正可以使用的变量变量stu1的存储示意图namenumsexagescoreaddr4字节4字节20字节1字节4字节30字节……每个成员变量有自己的内存空间结构体变量所分配的内存空间的大小是所有成员所分配的空间长度之和声明结构体类型的同时定义结构体变量struct

student{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;声明结构体类型定义结构体变量struct结构体名{

类型标识符成员名;类型标识符成员名;

…………….}变量名表列;直接定义结构体类型变量struct{

类型标识符成员名;类型标识符成员名;

…………….}变量名表列;struct{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;用无名结构体直接定义变量(只能定义一次)说明结构体类型与结构体变量概念不同structdate{intmonth;intday;intyear;};structstudent{intnum;charname[20];structdatebirthday;}stu;numnamebirthdaymonthdayyearprintf

("%d",sizeof(stu));structstudent{intnum;charname[20];

structdate{intmonth;intday;intyear;}birthday;}stu;结果:36类型:不分配内存;变量:分配内存类型:不能赋值、存取、运算;变量:可以结构体变量中的成员可单独使用,方法如普通变量;结构体可嵌套结构体变量的引用

可以对结构体变量进行整体赋值:stu2=stu1;将stu1中的所有内容赋值给stu2对结构体变量的整体操作只限于赋值操作和参数传递,而且要求类型一致不能对结构体变量进行整体输入输出例结构体变量中成员的引用结构体变量名.成员名成员(分量)运算符优先级:1结合性:从左向右struct

student{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;格式:stu1.num=10;stu1.age++;strcpy(,”Li”);stu1.score=85.5;stu1.score+=stu2.score;voidmain(){studentstu1,stu2;}scanf(“%d,%f”,&stu1);(

)scanf(“%d,%f”,&stu1.No,&stu1.score);(√)

printf(“%d,%f”,stu1);(

)printf(“%d,%f”,stu1.No,stu1.score);(√)stu2=stu1;(√)

struct

student

{intNo;floatscore;};例如果成员本身又属一个结构体类型,则要用若干个成员运算符,一级一级地找到最低一级的成员,只能对最低级的成员进行存取与运算

struct

student{intnum;charname[20];

structdate{intmonth;intday;intyear;}birthday;}stu1,stu2;stu1.birthday.month=18;结构体变量的成员与普通变量用法相同结构体变量的初始化形式一struct结构体名{

类型标识符成员名1;类型标识符成员名2;

…………….};struct结构体名结构体变量={初始数据};structstu{intnum;charname[20];intage;charaddr[30];};structstua={112,“WangLin”,19,“200BeijingRoad”};例形式二例struct结构体名{

类型标识符成员名1;类型标识符成员名2;

…………….}结构体变量={初始数据};structstu{intnum;charname[20];intage;charaddr[30];}a={112,“WangLin”,19,“200BeijingRoad”};形式三例struc

温馨提示

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

最新文档

评论

0/150

提交评论