第7章1结构体联合体课件

上传人:沈*** 文档编号:241647378 上传时间:2024-07-12 格式:PPT 页数:34 大小:765.50KB
返回 下载 相关 举报
第7章1结构体联合体课件_第1页
第1页 / 共34页
第7章1结构体联合体课件_第2页
第2页 / 共34页
第7章1结构体联合体课件_第3页
第3页 / 共34页
点击查看更多>>
资源描述
第第第第7 7 7 7章章章章 结构体、链表与文件系统(结构体、链表与文件系统(结构体、链表与文件系统(结构体、链表与文件系统(1 1 1 1)结构体结构体联合体联合体枚举类型枚举类型12024/7/122C数据类型基本类型构造类型指针类型空类型void定义类型typedef数值类型字符类型char枚举类型enum整 型浮点型单精度型float双精度型double短整型short长整型long整型int数组结构体struct联合体union系统给定的系统给定的数据类型数据类型在在基本基本类型类型基基础上自础上自己定义己定义的的2024/7/123记录某班记录某班记录某班记录某班30303030名学生的学号、姓名、性别、名学生的学号、姓名、性别、名学生的学号、姓名、性别、名学生的学号、姓名、性别、年龄、成绩年龄、成绩年龄、成绩年龄、成绩int ids30;char names3020;int ids30;char names3020;int ids30;char names3020;int ids30;char names3020;char sexes30;int ages30;char sexes30;int ages30;char sexes30;int ages30;char sexes30;int ages30;float scores30float scores30float scores30float scores30 概念引入:概念引入:解决问题:记录某班所有学生的成绩解决问题:记录某班所有学生的成绩解决问题:记录某班所有学生的成绩解决问题:记录某班所有学生的成绩 3 3 3 3 名?名?名?名?30 30 30 30 名?名?名?名?float x,y,z;float scores30;结构体的定义及应用结构体的定义及应用结构体的定义及应用结构体的定义及应用2024/7/124思考思考 在程序里表示一个人(姓名、性别、年龄在程序里表示一个人(姓名、性别、年龄在程序里表示一个人(姓名、性别、年龄在程序里表示一个人(姓名、性别、年龄),),),),怎么表示?怎么表示?怎么表示?怎么表示?想表示多少个人呢?想表示多少个人呢?想表示多少个人呢?想表示多少个人呢?如何用计算机程序实现下述表格的管理?如何用计算机程序实现下述表格的管理?如何用计算机程序实现下述表格的管理?如何用计算机程序实现下述表格的管理?表7-1 某学校学生成绩管理表学号学号学号学号姓名姓名姓名姓名性别性别性别性别入学时间入学时间入学时间入学时间计算机原理计算机原理计算机原理计算机原理英英英英 语语语语数数数数 学学学学音音音音 乐乐乐乐1 1令狐冲令狐冲男男1999199990908383727282822 2林平之林平之男男1999199978789292888878783 3岳灵珊岳灵珊女女1999199989897272989866664 4任莹莹任莹莹女女1999199978789595878790905 5 6 6 2024/7/125数组的解决方法数组的解决方法int int studentId30;studentId30;/*/*最多可以管理最多可以管理最多可以管理最多可以管理3030个学生个学生个学生个学生,每个学生的学号用数组的下标表示每个学生的学号用数组的下标表示每个学生的学号用数组的下标表示每个学生的学号用数组的下标表示*/charchar studentName3010;studentName3010;charchar studentSex302;studentSex302;int int timeOfEnter30;timeOfEnter30;/*/*入学时间用入学时间用入学时间用入学时间用intint表示表示表示表示*/int int scoreComputer30;scoreComputer30;/*/*计算机原理课的成绩计算机原理课的成绩计算机原理课的成绩计算机原理课的成绩*/int int scoreEnglish30;scoreEnglish30;/*/*英语课的成绩英语课的成绩英语课的成绩英语课的成绩*/int int scoreMath30;scoreMath30;/*/*数学课的成绩数学课的成绩数学课的成绩数学课的成绩*/int int scoreMusic30;scoreMusic30;/*/*音乐课的成绩音乐课的成绩音乐课的成绩音乐课的成绩*/2024/7/126 数据的内存管理方式数据的内存管理方式 907889788392729572889887827866901234令狐冲林平之岳灵珊任莹莹男男女女1999199919991999数组的解决方法数组的解决方法数组的解决方法数组的解决方法数组可处理大量的同类型数据,数组中数组可处理大量的同类型数据,数组中数组可处理大量的同类型数据,数组中数组可处理大量的同类型数据,数组中的每一个元素都属于同一种数据类型的每一个元素都属于同一种数据类型的每一个元素都属于同一种数据类型的每一个元素都属于同一种数据类型2024/7/127 数据的内存管理方式数据的内存管理方式 907889788392729572889887827866901234令狐冲林平之岳灵珊任莹莹男男女女1999199919991999数组的解决方法数组的解决方法数组的解决方法数组的解决方法分配内存不集中,寻址效率不高分配内存不集中,寻址效率不高 对数组进行赋初值时,容易发生错位对数组进行赋初值时,容易发生错位 结构显得比较零散,不容易管理结构显得比较零散,不容易管理2024/7/128希望的内存分配图希望的内存分配图 1令狐冲男1999908372822林平之男1999789288783岳灵珊女1999897298664任莹莹女1999789587902024/7/129结构体的解决方法结构体的解决方法 structstruct STUDENTSTUDENT int int studentID;studentID;/*/*每个学生的序号每个学生的序号每个学生的序号每个学生的序号*/char char studentName10;studentName10;/*/*每个学生的姓名每个学生的姓名每个学生的姓名每个学生的姓名*/char char studentSex4;studentSex4;/*/*每个学生的性别每个学生的性别每个学生的性别每个学生的性别*/intinttimeOfEnter;timeOfEnter;/*/*每个学生的入学时间每个学生的入学时间每个学生的入学时间每个学生的入学时间*/intintscoreComputer;scoreComputer;/*/*每个学生的计算机原理成绩每个学生的计算机原理成绩每个学生的计算机原理成绩每个学生的计算机原理成绩*/intintscoreEnglish;scoreEnglish;/*/*每个学生的英语成绩每个学生的英语成绩每个学生的英语成绩每个学生的英语成绩*/intintscoreMath;scoreMath;/*/*每个学生的数学成绩每个学生的数学成绩每个学生的数学成绩每个学生的数学成绩*/intintscoreMusic;scoreMusic;/*/*每个学生的音乐成绩每个学生的音乐成绩每个学生的音乐成绩每个学生的音乐成绩*/;struct STUDENTstruct STUDENT是一个类型是一个类型是一个类型是一个类型 struct STUDENTstruct STUDENT students4;students4;students0.students0.studentIDstudentIDstudents0.students0.scoreComputerscoreComputer 它们都是变量,一般称为结构的成员变量它们都是变量,一般称为结构的成员变量它们都是变量,一般称为结构的成员变量它们都是变量,一般称为结构的成员变量2024/7/1210结构体结构体&结构体是结构体是结构体是结构体是一种一种一种一种构造构造构造构造数据类型数据类型数据类型数据类型&用途:把用途:把用途:把用途:把不同类型不同类型不同类型不同类型的数据组合成一个整体的数据组合成一个整体的数据组合成一个整体的数据组合成一个整体-自定义自定义自定义自定义数据类型数据类型数据类型数据类型结构体类型定义结构体类型定义结构体类型定义结构体类型定义struct 结构体名结构体名 类型标识符类型标识符 成员名;成员名;类型标识符类型标识符 成员名;成员名;.;成员类型成员类型可以是可以是基本型或构造型基本型或构造型struct是是关键字关键字,不能省略不能省略合法标识符合法标识符可省可省:无名结构体无名结构体分号不能省略分号不能省略例 struct student int num;char name20;char sex;int age;float score;char addr30;struct student stu1,stu2;结构体变量的定义结构体变量的定义结构体变量的定义结构体变量的定义1 1、先定义结构体类型,再定义结构体变量、先定义结构体类型,再定义结构体变量、先定义结构体类型,再定义结构体变量、先定义结构体类型,再定义结构体变量 一般形式:一般形式:一般形式:一般形式:struct 结构体名结构体名 类型标识符类型标识符 成员名;成员名;类型标识符类型标识符 成员名;成员名;.;struct 结构体名结构体名 变量名表列变量名表列;定义结构体变定义结构体变量之后量之后为其为其分分配内存单元配内存单元namenumsexagescoreaddr4字节4字节20字节1字节4字节30字节.stu12024/7/1212结构体的内存占用结构体的内存占用 int int 占用内存字节数占用内存字节数占用内存字节数占用内存字节数 =4=4 struct struct 类型用内存字节数类型用内存字节数类型用内存字节数类型用内存字节数 =?=?是所有成员变量的内存总和吗?是所有成员变量的内存总和吗?是所有成员变量的内存总和吗?是所有成员变量的内存总和吗?structstruct number number shortshort i;i;/2/2 charchar ch;ch;/1/1 floatfloat f;f;/4/4 ;printf(%dn,sizeof(printf(%dn,sizeof(structstruct number);number);用运算符用运算符用运算符用运算符sizeofsizeof获得结构体大小获得结构体大小获得结构体大小获得结构体大小sizeofsizeof(变量或表达式变量或表达式变量或表达式变量或表达式)sizeofsizeof(类型类型类型类型)82024/7/1213结构体的内存占用结构体的内存占用事实上所有数据类型在内存中都是从事实上所有数据类型在内存中都是从偶数偶数偶数偶数地址开始存放的地址开始存放的且结构所占的实际空间一般是按照机器字长对齐的且结构所占的实际空间一般是按照机器字长对齐的特定数据类型的数据项的大小是与机器相关的特定数据类型的数据项的大小是与机器相关的,如,如32位系统:位系统:结构体类型大小结构体类型大小=((成员数据类型大小的和成员数据类型大小的和+3)/4)*4(7+3)/4)*4=8i if fchchi ichchf f2 2、定义结构体类型的同时定义结构体变量、定义结构体类型的同时定义结构体变量、定义结构体类型的同时定义结构体变量、定义结构体类型的同时定义结构体变量一般形式:一般形式:一般形式:一般形式:struct 结构体名结构体名 类型标识符类型标识符 成员名;成员名;类型标识符类型标识符 成员名;成员名;.变量名表列变量名表列;例 struct student int num;char name20;char sex;int age;float score;char addr30;stu1,stu2;3 3、直接定义结构体变量、直接定义结构体变量、直接定义结构体变量、直接定义结构体变量一般形式:一般形式:一般形式:一般形式:struct 类型标识符类型标识符 成员名;成员名;类型标识符类型标识符 成员名;成员名;.变量名表列变量名表列;例 struct int num;char name20;char sex;int age;float score;char addr30;stu1,stu2;用用无名结构体无名结构体直接定义直接定义变量变量只能一次只能一次2024/7/1216 结构体类型与结构体变量概念不同结构体类型与结构体变量概念不同结构体类型与结构体变量概念不同结构体类型与结构体变量概念不同 类型类型类型类型:不分配内存;不分配内存;不分配内存;不分配内存;变量变量变量变量:分配内存分配内存分配内存分配内存 结构体类型是一个模型,类似系统给定的基本类型比如结构体类型是一个模型,类似系统给定的基本类型比如结构体类型是一个模型,类似系统给定的基本类型比如结构体类型是一个模型,类似系统给定的基本类型比如intint、float float 等类型,只是结构体类型是用户自定义的而已。等类型,只是结构体类型是用户自定义的而已。等类型,只是结构体类型是用户自定义的而已。等类型,只是结构体类型是用户自定义的而已。结构体可嵌套结构体可嵌套结构体可嵌套结构体可嵌套 结构体成员名与程序中变量名可相同,不会混淆结构体成员名与程序中变量名可相同,不会混淆结构体成员名与程序中变量名可相同,不会混淆结构体成员名与程序中变量名可相同,不会混淆例 struct date int month;int day;int year;struct student int num;char name20;struct date birthday;stu;numnamebirthdaymonthdayyear 结构体变量的引用结构体变量的引用结构体变量的引用结构体变量的引用引用规则引用规则引用规则引用规则 结构体变量结构体变量结构体变量结构体变量不能整体引用不能整体引用不能整体引用不能整体引用,只能引用变量只能引用变量只能引用变量只能引用变量成员成员成员成员 可以将一个可以将一个可以将一个可以将一个结构体变量赋值给另一个结构体变量结构体变量赋值给另一个结构体变量结构体变量赋值给另一个结构体变量结构体变量赋值给另一个结构体变量 结构体嵌套时结构体嵌套时结构体嵌套时结构体嵌套时逐级引用逐级引用逐级引用逐级引用成员(分量)运算符优先级:1结合性:从左向右引用方式:引用方式:引用方式:引用方式:结构体变量名结构体变量名结构体变量名结构体变量名.成员名成员名成员名成员名例 struct student int num;char name20;char sex;int age;float score;char addr30;stu1,stu2;stu1.num=10;stu1.score=85.5;stu1.score+=stu2.score;stu1.age+;例 struct student int num;char name20;char sex;int age;float score;char addr30;stu1,stu2;printf(“%d,%s,%c,%d,%f,%sn”,stu1);()stu1=101,“Wan Lin”,M,19,87.5,“DaLian”;()例 struct student int num;char name20;char sex;int age;float score;char addr30;stu1,stu2;stu2=stu1;()例 struct student int num;char name20;struct date int month;int day;int year;birthday;stu1,stu2;numnamebirthdaymonthdayyearstu1.birthday.month=12;2024/7/1218 结构体变量的初始化结构体变量的初始化结构体变量的初始化结构体变量的初始化形式一:形式一:形式一:形式一:struct 结构体名结构体名 类型标识符类型标识符 成员名;成员名;类型标识符类型标识符 成员名;成员名;.;struct 结构体名结构体名 结构体变量结构体变量=初始数据初始数据;例 struct student int num;char name20;char sex;int age;char addr30;struct student stu1=112,“Wang Lin”,M,19,“200 Beijing Road”;2024/7/1221定义自己的类型名定义自己的类型名 struct struct studentstudent student1,student2;student1,student2;/*/*可以可以可以可以*/student student student1,student2;student1,student2;/*/*不可以不可以不可以不可以*/typedeftypedef structstruct studentstudent STUD STUD;STUD STUD student1,student2;student1,student2;/*/*可以可以可以可以!*/!*/typedef为一种为一种已存在已存在的的类型定义一个类型定义一个新名字新名字STUD与与struct student类型是类型是同义词同义词struct student int num;char name20;char sex;int age;float score;char addr30;结构体数组结构体数组结构体数组结构体数组结构体数组的定义结构体数组的定义结构体数组的定义结构体数组的定义struct student int num;char name20;char sex;int age;struct student stu30;numnamesexagenumnamesexagestu0stu132B结构体数组初始化结构体数组初始化结构体数组初始化结构体数组初始化例 struct int num;char name20;char sex;int age;stu=,;顺序初始化:struct student int num;char name20;char sex;int age;struct student stu=100,“Wang Lin”,M,20,101,“Li Gang”,M,19,110,“Liu Yan”,F,19;例 struct student int num;char name20;char sex;int age;stu=,;分行初始化:struct student int num;char name20;char sex;int age;struct student stu=100,“Wang Lin”,M,20,101,“Li Gang”,M,19,110,“Liu Yan”,F,19;全部初始化时维数可省全部初始化时维数可省结构体数组引用结构体数组引用结构体数组引用结构体数组引用引用方式:引用方式:引用方式:引用方式:结构体数组名结构体数组名结构体数组名结构体数组名 下标下标下标下标.成员名成员名成员名成员名 struct student int num;char name20;char sex;int age;str3;stu1.age+;strcpy(stu0.name,“ZhaoDa”);str0.name=“ZhaoDa”2024/7/1224 结构体和指针结构体和指针结构体和指针结构体和指针指向结构体变量的指针指向结构体变量的指针指向结构体变量的指针指向结构体变量的指针 定义形式:定义形式:定义形式:定义形式:struct struct 结构体名结构体名结构体名结构体名 *结构体指针名结构体指针名结构体指针名结构体指针名;例例例例 struct student *p;struct student *p;使用结构体指针变量引用成员形式使用结构体指针变量引用成员形式使用结构体指针变量引用成员形式使用结构体指针变量引用成员形式存放结构体变量在内存的起始地址存放结构体变量在内存的起始地址numnamesexagestupstruct student int num;char name20;char sex;int age;stu;struct student *p=&stu;(*结构体指针名结构体指针名).成员名成员名结构体指针名结构体指针名-成员名成员名结构体变量名结构体变量名.成员名成员名指向运算符指向运算符优先级优先级:1:1结合方向:从左向右结合方向:从左向右#includemain()struct student long int num;char name20;char sex;float score;stu_1,*p;p=&stu_1;stu_1.num=89101;strcpy(stu_1.name,Li Lin);p-sex=M;p-score=89.5;printf(nNo:%ldnname:%snsex:%cnscore:%fn,(*p).num,p-name,stu_1.sex,p-score);例例 int n;int *p=&n;*p=10;n=10struct student stu1;struct student *p=&stu1;stu1.num=101;(*p).num=101运行结果运行结果:No:89101name:Li Lin sex:Mscore:89.5指向结构体数组的指针指向结构体数组的指针指向结构体数组的指针指向结构体数组的指针struct student int num;char name20;char sex;int age;stu3=10101,Li Lin,M,18,10102,Zhang Fun,M,19,10104,Wang Min,F,20;main()struct student*p;for(p=stu;pnum,p-name,p-sex,p-age);numnamesexagestu0pstu1stu2p+1stu3相当于相当于p=&stu0;2024/7/1226&构造数据类型构造数据类型构造数据类型构造数据类型,也叫共用体也叫共用体也叫共用体也叫共用体&用途:使几个不同类型的变量共占一段内存用途:使几个不同类型的变量共占一段内存用途:使几个不同类型的变量共占一段内存用途:使几个不同类型的变量共占一段内存(相互覆盖相互覆盖相互覆盖相互覆盖)共用体类型定义共用体类型定义共用体类型定义共用体类型定义union 共用体名共用体名 类型标识符类型标识符 成员名;成员名;类型标识符类型标识符 成员名;成员名;.;例 union data int i;char ch;float f;类型定义类型定义不分配内存不分配内存7.2 7.2 联合体(联合体(联合体(联合体(unionunion)2024/7/12277.2 联合体(联合体(union)structstruct number number shortshort i;i;charchar ch;ch;floatfloat f;f;0 x0037b00unionunion number number shortshort i;i;charchar ch;ch;floatfloat f;f;printf(%dn,sizeof(struct number);printf(%dn,sizeof(struct number);i ichchf fi ichchf fprintf(%dn,sizeof(union number);printf(%dn,sizeof(union number);联合体类型变量占用的存储联合体类型变量占用的存储空间由占有最大存储区的成空间由占有最大存储区的成员决定员决定2024/7/1228形式二:union data int i;char ch;float f;a,b;形式一:union data int i;char ch;float f;union data a,b,c,*p,d3;形式三:union int i;char ch;float f;a,b,c;联合体变量的定义联合体变量的定义fchifchiab共用体共用体变量定义变量定义分配内存分配内存,长度长度=最长成员最长成员所占字节数所占字节数共用体共用体变量任何时刻变量任何时刻只有只有一个成员一个成员存在存在2024/7/1229联合体变量引用联合体变量引用 引用规则引用规则引用规则引用规则 不能引用共用体变量,只能不能引用共用体变量,只能不能引用共用体变量,只能不能引用共用体变量,只能引用其成员引用其成员引用其成员引用其成员共用体指针名共用体指针名-成员名成员名共用体变量名共用体变量名.成员名成员名(*共用体指针名共用体指针名).成员名成员名 共用体变量中起作用的成员是共用体变量中起作用的成员是共用体变量中起作用的成员是共用体变量中起作用的成员是最后一次存放的成员最后一次存放的成员最后一次存放的成员最后一次存放的成员例例 union int i;char ch;float f;a;a=1;()在定义共用体变量时在定义共用体变量时在定义共用体变量时在定义共用体变量时只能初始化第一个成员只能初始化第一个成员只能初始化第一个成员只能初始化第一个成员例例 union int i;char ch;float f;a=1,a,1.5;()可以用一个共用体变量为另一个变量赋值可以用一个共用体变量为另一个变量赋值可以用一个共用体变量为另一个变量赋值可以用一个共用体变量为另一个变量赋值例例 float x;union int i;char ch;float f;a,b;a.i=1;a.ch=a;a.f=1.5;b=a;()x=a.f;()2024/7/12307.2 联合体(联合体(union)0 x0037b00 同一内存单元在每一瞬时只能存放其中一种类同一内存单元在每一瞬时只能存放其中一种类同一内存单元在每一瞬时只能存放其中一种类同一内存单元在每一瞬时只能存放其中一种类型的成员,互相覆盖型的成员,互相覆盖型的成员,互相覆盖型的成员,互相覆盖 ;起作用的成员是起作用的成员是起作用的成员是起作用的成员是最后一次存放最后一次存放最后一次存放最后一次存放的成员的成员的成员的成员 不能作为函数参数不能作为函数参数不能作为函数参数不能作为函数参数 不能给联合体变量名直接赋值不能给联合体变量名直接赋值不能给联合体变量名直接赋值不能给联合体变量名直接赋值 f f2024/7/1231structstruct person person charchar name20;name20;charchar sex;sex;intint age;age;unionunion intint single;single;structstruct charchar spouseName20;spouseName20;intint child;child;married;married;structstruct date divorcedDay;date divorcedDay;marital;marital;intint marryFlag;marryFlag;联合体的应用联合体的应用联合体的应用联合体的应用姓名姓名name性别性别sex年龄年龄age婚姻状况婚姻状况婚姻状况婚姻状况标记标记未婚未婚 已婚已婚离婚离婚配配偶偶子子女女年年 月月日日 unionunion intint single;single;structstruct charchar spouseName20;spouseName20;intint child;child;married;married;structstruct date divorcedDay;date divorcedDay;marital;marital;structstruct charchar spouseName20;spouseName20;intint child;child;married;married;2024/7/1232 如果一个变量只有如果一个变量只有如果一个变量只有如果一个变量只有几种可能的值,可以定义几种可能的值,可以定义几种可能的值,可以定义几种可能的值,可以定义为枚举类为枚举类为枚举类为枚举类型型型型enumenum 枚举量表枚举量表枚举量表枚举量表;enumenum _weekday_weekday Sun,Mon,Tue,Wed,Thu,Fri,Sat;Sun,Mon,Tue,Wed,Thu,Fri,Sat;typedef enumtypedef enum _weekday_weekday Sun,Mon,Tue,Wed,Thu,Sun,Mon,Tue,Wed,Thu,Fri,Sat weekday;Fri,Sat weekday;weekday workay;weekday workay;enumenum booleanboolean True=1,False=0;True=1,False=0;7.3 枚举类型枚举类型结束语当你尽了自己的最大努力时,失败也是伟大的,所以不要放弃,坚持就是正确的。When You Do Your Best,Failure Is Great,So DonT Give Up,Stick To The End感谢聆听不足之处请大家批评指导Please Criticize And Guide The Shortcomings演讲人:XXXXXX 时 间:XX年XX月XX日
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!