C语言的结构体和共同体

上传人:飞*** 文档编号:54680876 上传时间:2018-09-17 格式:PPT 页数:41 大小:607KB
返回 下载 相关 举报
C语言的结构体和共同体_第1页
第1页 / 共41页
C语言的结构体和共同体_第2页
第2页 / 共41页
C语言的结构体和共同体_第3页
第3页 / 共41页
C语言的结构体和共同体_第4页
第4页 / 共41页
C语言的结构体和共同体_第5页
第5页 / 共41页
点击查看更多>>
资源描述

《C语言的结构体和共同体》由会员分享,可在线阅读,更多相关《C语言的结构体和共同体(41页珍藏版)》请在金锄头文库上搜索。

1、1,第八章 结构体、共用体和枚举类型,8.1 结构体,8.2 共用体,8.3 枚举类型,8.4 用typedef定义类型,2,结构体是一种构造数据类型用途:把不同类型的数据组合成一个整体-自定义数据类型,struct 结构体名 类型标识符 成员名;类型标识符 成员名;. ;,成员类型可以是 基本型或构造型,struct是关键字, 不能省略,合法标识符 可省:无名结构体,8.1.1 结构体类型声明,8.1 结构体,结构体类型定义,3,例 struct student int num;char name20;char sex;int age;float score;char addr30;,结构体

2、类型定义描述结构 的组织形式,不分配内存,结构体类型定义的作用域,8.1 结构体,struct student应作为一个类型整体,num,name20等都只是其中的成员,且struct及“”后的“;”不能省略。,4,8.1 结构体,例 个人数据: 包含姓名、性别、年龄、身高、体重、住址:,struct person char name20; /*姓名*/ char sex; /*性别*/ int age; /*年龄*/ float height; /*身高*/ float weight; /*体重*/ char addr50; /*住址*/ ;,struct date int year; /*

3、年*/ month; /*月*/ day; /*日*/ ;,例 日期,包括年、 月、 日:,5,8.1 结构体,如职工信息结构体类型为: struct person char name20; /*姓名*/ char address40; /*地址*/ float salary; /*工资*/ float cost; /*扣款*/ struct date hiredate; /*聘任日期*/ ;,结构体类型可以嵌套定义 即一个结构体类型中的某些成员又是其他结构体类型,6,8.1 结构体,8.1.2 结构体变量的定义,先定义结构体类型,再定义结构体变量 一般形式:,struct 结构体名 类型标识

4、符 成员名;类型标识符 成员名;. ; struct 结构体名 变量名表列;,例 struct student int num;char name20;char sex;int age;float score;char addr30;struct student stu1,stu2,7,定义结构体类型的同时定义结构体变量 一般形式:,8.1 结构体,struct 结构体名 类型标识符 成员名;类型标识符 成员名;. 变量名表列;,例 struct student int num;char name20;char sex;int age;float score;char addr30;stu1,

5、stu2;,8,8.1 结构体,直接定义结构体变量 一般形式:,struct 类型标识符 成员名;类型标识符 成员名;. 变量名表列;,例 struct int num;char name20;char sex;int age;float score;char addr30;stu1,stu2;,用无名结构体直接定义 变量只能一次,9,8.1 结构体,说明:结构体类型与结构体变量概念不同类型:不分配内存; 变量:分配内存类型:不能赋值、存取、运算; 变量:可以结构体可嵌套结构体成员名与程序中变量名可相同,不会混淆结构体类型及变量的作用域与生存期,10,8.1 结构体,8.1.3 结构体变量的引

6、用,引用规则结构体变量不能整体引用,只能引用变量成员引用方式: 结构体变量名.成员名,成员(分量)运算符 优先级: 1 结合性:从左向右,如果结构体变量类型相同,可以将一个结构体变量赋值给另一个结构体变量结构体嵌套时逐级引用,例; stu1=stu2;,例: stu1.birthday.day=23;stu1.birthday.month=8;stu1.birthday.year=2003;,11,8.1 结构体,8.1.4 结构体变量的使用,1、 结构体变量的初始化,形式一:,struct 结构体名 类型标识符 成员名;类型标识符 成员名;. ; struct 结构体名 结构体变量=初始数据

7、;,例 struct student int num;char name20;char sex;int age;char addr30; struct student stu1=112,“Wang Lin”,M,19, “200 Beijing Road”;,12,8.1 结构体,形式二:,struct 结构体名 类型标识符 成员名;类型标识符 成员名;. 结构体变量=初始数据;,例 struct student int num;char name20;char sex;int age;char addr30;stu1=112,“Wang Lin”,M,19, “200 Beijing Roa

8、d”;,13,8.1 结构体,形式三:,struct 类型标识符 成员名;类型标识符 成员名;. 结构体变量=初始数据;,例 struct int num;char name20;char sex;int age;char addr30;stu1=112,“Wang Lin”,M,19, “200 Beijing Road”;,14,8.1 结构体,2、结构体变量的输入输出不允许对结构体变量进行整体的输入输出如:scanf(“%s%c%d%f”,struct student int num;int age;float score; stu; void main() printf(“Enter

9、num,age,score:“);scanf(“%d,%d,%f“, ,程序运行过程: Enter num,age,score: 1001,19,98.5 num:1001,age:19,score:98.5,15,结构体数组的定义,形式一: struct student int num;char name20;char sex;int age; struct student stu2;,形式二:struct student int num;char name20;char sex;int age;stu2;,形式三:struct int num;char name20;char sex;in

10、t age;stu2;,8.1 结构体,8.1.5 结构体数组,16,例 struct int num;char name20;char sex;int age;stu =,;,引用方式: 结构体数组名下标.成员名,struct student int num;char name20;char sex;int age;str3;,stu1.age+;,strcpy(stu0.name,”ZhaoDa”);,8.1 结构体,结构体数组的初始化,结构体数组的引用,17,struct person char name20;int count; leader3=“Li”,0,“Zhang”,0,”Wa

11、ng“,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+;for(i=0;iname,p-sex,p-age);,21,8.1 结构体,指针移动示意图:,注意:如果p的初值为stu,即指向第一个元素,则p+1后指向下一个元素的起始地址。请区别: (+p)-num 和 (p+)-num指针p已定义为指向struct student类型的数据,它只能指向该结构

12、体类型数据,而不能指向一元素的某一成员(即p的地址不能是成员的地址)。如下面的赋值是错误的: p=&stu.name,22,8.1 结构体,8.1.7 结构体与函数,1、结构体变量作函数参数,有时需要将一个结构体变量的值传递给另一个函数可以:用结构体变量的成员作参数。用法和普通变量作实参是一样的,属“值传递”方式。 形参与实参都用结构体变量 直接将实参结构体变量的各个成员的值全部传递给形参的结构体变量。 注意:实参和形参类型应当完全一致。,23,struct data int a, b, c; ; main() void func(struct data);struct data arg;ar

13、g.a=27; arg.b=3; arg.c=arg.a+arg.b;printf(“arg.a=%d arg.b=%d arg.c=%dn“,arg.a,arg.b,arg.c);printf(“Call Func()n“);func(arg);printf(“arg.a=%d arg.b=%d arg.c=%dn“,arg.a,arg.b,arg.c); void func(struct data parm) printf(“parm.a=%d parm.b=%d parm.c=%dn“,parm.a,parm.b,parm.c);printf(“Process.n“);parm.a=18; parm.b=5; parm.c=parm.a*parm.b;printf(“parm.a=%d parm.b=%d parm.c=%dn“,parm.a,parm.b,parm.c);printf(“Return.n“); ,

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

当前位置:首页 > 行业资料 > 其它行业文档

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