C语言课件-第10讲_第1页
C语言课件-第10讲_第2页
C语言课件-第10讲_第3页
C语言课件-第10讲_第4页
C语言课件-第10讲_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

1、第十讲Begin:第十章 结构体和共用体 结构体类型的定义结构体类型变量的定义结构体类型变量的初始化和引用结构体数组9.1 结构体 结构体是数目固定、类型不同的若干变量(成员)的有序集合,在内存中占据一段连续的存储空间。在程序中使用结构体,必须先做两项工作:1)定义结构体类型:描述该结构体的成员名称、成员类型;2)定义结构体变量:根据结构体类型为定义的结构体变量分配存储空间。9.1.1 结构体类型的定义 结构体类型定义的一般格式为: struct 结构体名 类型名1 成员名1; 类型名2 成员名2; 类型名n 成员名n; ;9.1.1 结构体类型的定义 结构体类型定义的格式说明:struct:

2、关键字,是定义结构体类型的标志。结构体名:标识符,其命名规则同变量名。struct 结构体名:结构体类型名,作用等同于int、float等关键字,用于定义结构体变量。 类型名1n:说明了结构体成员的数据类型。成员名1n:用户定义的一个或多个结构体成员的名称,其命名规则同变量名。多个同类型的成员彼此间用逗号分隔。9.1.1 结构体类型的定义 结构体类型定义举例: struct _Student char id10; /*学号*/char name10; /*姓名*/int score3; /*成绩*/int sum; /*总分*/ ;9.1.2 结构体类型变量的定义 结构体类型的定义只是指出了该

3、结构体的组成情况,系统并不会为它分配实际的存储单元。应在定义了结构体类型以后,再定义该结构体类型的变量(简称结构体变量),以便在结构体变量中存放具体的数据。结构体变量的定义方式有三种:先定义结构体类型,再定义结构体变量。在定义结构体类型的同时定义结构体变量。直接定义结构体变量。9.1.2 结构体类型变量的定义 方式一:若事先已定义了结构体类型,那么直接用下面的格式定义结构体变量: 结构体类型名 结构体变量名;例如:struct _Student stu1, stu2;stu1和stu2的存储形式为:sumscore2score0name9name0id9id010字节10字节6字节2字节9.1

4、.2 结构体类型变量的定义 方式二:在定义结构体类型的同时定义结构体变量。定义格式为: struct 结构体名 类型名1 成员名1; 类型名2 成员名2; 类型名n 成员名n; 结构体变量名表;9.1.2 结构体类型变量的定义 例如: struct _Student char id10; char name10; int score3; int sum; stu1, stu2;9.1.2 结构体类型变量的定义 方式三:在定义结构体类型时可以直接定义结构体变量。定义格式为: struct 类型名1 成员名1; 类型名2 成员名2; 类型名n 成员名n; 结构体变量名表;9.1.2 结构体类型变量

5、的定义 例如: struct char id10; char name10; int score3; int sum; stu1, stu2;9.1.2 结构体类型变量的定义 关于结构体的说明: 类型与变量是不同的概念,应注意区分。系统可以对变量赋值、存取、运算,而类型则不能。编译时,系统只为变量分配存储单元,而类型则不分配。结构体中的成员也可以是一个结构体变量,即结构体的嵌套。结构体中的成员可以和程序中的变量同名,不同结构体中的成员也可以同名。 9.1.2 结构体类型变量的定义 例如: struct date int year, month, day; ; struct _Student2

6、char id10; char name10; struct date birth; /*birth为结构体成员*/ int score3; int sum; stu1, stu2;9.1.2 结构体类型变量的定义 关于结构体的说明: 可以使用typedef关键字为结构体类型定义一个别名。例如:typedef struct _Student char id10; char name10; int score3; int sum; Student;9.1.2 结构体类型变量的定义 以后就可以用Student代替结构体类型名来定义结构体变量了。例如: Student stu1, stu2;等价于:

7、 struct _Student stu1, stu2;9.1.3 结构体类型变量的初始化和引用 结构体变量的初始化类似于对数组的初始化,由于结构体变量的成员可以有不同的数据类型,所以各个初值必须与相应成员保持类型一致或兼容。例1:struct _Student char id10; char name10; int score3; int sum; stu1 = 20050001, 胡树伟, 87, 71, 81;9.1.3 结构体类型变量的初始化和引用 例2: struct date int year, month, day; ; struct _Student2 char id10; c

8、har name10; struct date birth; int score3; int sum; stu2 = 20050002, 李冬, 1987, 5, 3, 75, 85, 76;9.1.3 结构体类型变量的初始化和引用 对结构体变量初始化的说明:对结构体变量进行初始化时,系统是按每个成员在结构体变量中的顺序一一对应赋初值的。若只对部分成员进行初始化,则只能给前面的若干成员赋值,而不允许跳过前面的成员给后面的成员赋值。例如:前面两例中结构体变量stu1和stu2的成员sum没有获得指定初值,而是获得默认初值0。9.1.3 结构体类型变量的初始化和引用 引用结构体变量的一般方式为:结

9、构体变量名成员名其中:为结构体成员运算符,1级运算符。例如:stu1.sum表示对结构体变量stu1中的sum成员进行引用。9.1.3 结构体类型变量的初始化和引用 结构体变量的引用规则:不能将结构体变量作为一个整体进行输入和输出。 例如:struct _Student3 long num; int age; char sex; st; 下面的写法是错误的: scanf(%ld%d%c, &st); printf(%ld,%d,%c, st); 下面的写法是正确的: scanf(%ld%d%c, &st.num, &st.age, &st.sex); printf(%ld,%d,%c, st.

10、num, st.age, st.sex);9.1.3 结构体类型变量的初始化和引用 结构体变量的引用规则:内嵌结构体成员的引用,必须逐层使用成员名定位,找到最底层的成员。 例如: struct date int year, month, day; ; struct _Student2 char id10, name10; struct date birth; int score3, sum; stu2 = 20050002, 李冬, 1987, 5, 3, 75, 85, 76; printf(birthday=%d,%d,%dn, stu2.birth.year, stu2.birth.mo

11、nth, stu2.birth.day);9.1.3 结构体类型变量的初始化和引用 结构体变量的引用规则:若结构体的成员是字符数组,可对其进行直接引用。 例如: struct _Student char id10; char name10; int score3; int sum; stu1; scanf(%s%s, stu1.id, ); printf(id=%s, name=%s, stu1.id, );9.1.3 结构体类型变量的初始化和引用 结构体变量的引用规则:若结构体的成员是数值型数组,则应逐个引用数组中的元素。 例如: struct _Stud

12、ent char id10; char name10; int score3; int sum; stu1; scanf(%d%d%d, &stu1.score0, &stu1.score1, &stu1.score2); printf(Math=%d, English=%d, Computer=%d, stu1.score0, stu1.score1, stu1.score2);9.1.3 结构体类型变量的初始化和引用 例 结构体变量的输入和输出typedef struct _Student char id10, name10; int score3, sum; Student; /*定义结

13、构体类型别名*/void main( ) Student stu1, stu2; /*定义结构体变量*/ scanf(%s%s%d%d%d, stu1.id, , &stu1.score0, &stu1.score1, &stu1.score2); stu1.sum=stu1.score0+stu1.score1+stu1.score2; stu2=stu1; printf(%s, %s, %d, %d, %d, %d, stu2.id, , stu2.score0, stu1.score1, stu1.score2, stu2.sum);9.1.4 结构体

14、数组 结构体数组的每个数组元素都是一个结构体变量,它们都分别包括各个成员项。结构体数组的定义和定义结构体变量的方法相似,只需说明其为数组即可。例1: struct _Student char id10, name10; int score3, sum; ; struct _Student stu50;9.1.4 结构体数组 例2: struct _Student char id10, name10; int score3, sum; stu50;例3: struct char id10, name10; int score3, sum; stu50;9.1.4 结构体数组 结构体数组的初始化结

15、构体数组的初始化与普通数组的初始化相似。 例如: struct _Student char id10, name10; int score3, sum; ;struct _Student stu3= 20050001, 胡树伟, 87, 71, 81, 20050002, 李冬, 75, 85, 76, 20050003, 梁若婵, 86, 75, 90;9.1.4 结构体数组 结构体数组的引用结构体数组的引用与结构体变量的引用相似。 例 结构体数组的引用 typedef struct _Student char id10; char name10; int score3; int sum;

16、Student; /*定义结构体类型别名*/9.1.4 结构体数组 void main( ) int i, j; Student stu50; /*定义结构体数组*/ for(i=0; i50; i+) scanf(%s%s%d%d%d, stui.id, , &stui.score0, &stui.score1, &stui.score2); for(stui.sum=0, j=0; j3; j+) stui.sum += stui.scorej; for(i=0; i50; i+) printf(%s,%s,%d,%d,%d,%dn, stui.id,

17、, stui.score0, stui.score1, stui.score2, stui.sum);9.1.4* 结构体数组名作为函数参数 结构体数组名作为函数参数与普通数组名作为函数参数相似,传递的也是数组的首地址。 例 结构体数组名作为函数参数 typedef struct _Student char id10; char name10; int score3; int sum; Student; /*定义结构体类型别名*/ void sort(Student stu , int); /*函数原型声明*/9.1.4* 结构体数组名作为函数参数 void main( ) int i, j; Student stu50; /*定义结构体数组*/ for(i=0; i50; i+) scanf(%s%s%d%d%d, stui.id, , &stui.score0, &stui.score1, &stui.score2); for(stui.sum=0, j=0; j3; j+) stui.sum += stui.scorej; sort(stu, 50); for(i=0; i50; i+) printf(%s,%s,%d,%d,%d,%dn, stui.id, , stui.score0, stui.score1, stui

温馨提示

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

评论

0/150

提交评论