结构体与共用体72页PPT
- 格式:ppt
- 大小:10.72 MB
- 文档页数:72
拓展知识8-1 共用体对于结构体类型,结构体变量中的每一个成员都有各自的存储单元,C语言中还有另外一种数据类型,它当中的每一个成员数据共用一段相同的存储单元,我们把这样的数据类型称为共用体类型。
共用体类型的定义与结构体类型的定义的方式基本相同,只不过它们所使用的关键字不同,定义共用体类型所使用的关键字是union。
1.共用体类型定义的一般格式union 共用体名{数据类型成员名1;数据类型成员名2;… …… …数据类型成员名n;};说明:(1)union是定义共用体类型用的关键字,union与共用体名一起构成共用体类型标识符。
(2)共用体类型定义后,系统并不为其分配存储空间,只有定义了共用体变量后系统才为共用体变量分配相应的存储空间。
【示例1】union data{int a;double b;char c;};定义了一个共用体类型,类型名为data,它有三个成员,a是int型,b是double型,c是char型,它们共用一段存储单元。
2.共用体变量的定义共用体变量的定义与结构体变量的定义基本相同。
一是在定义共用体类型的同时定义共用体变量;二是在定义共用体类型后,用共用体类型标识符(union共用体名)定义共用体变量。
【示例2】union data{int a;double b;char c;}x,y;定义共用体类型的同时定义共用体变量x,y。
【示例2】union data{int a;double b;char c;};union data x,y[3];定义共用体类型后,用共用体类型标识符定义共用体变量x和共用体数组y[3]。
说明:(1)共用体变量定义后,在编译或程序运行时系统为共用体变量分配存储空间,共用体变量的存储长度为各成员中存储长度的最大者。
如【示例2】定义的共用体变量x的存储长度为8个字节。
(2)同样可以定义共用体数组和指向共用体变量的指针。
3.共用体变量的引用对于共用体变量,不能引用整个变量,而只能引用共用体变量中的成员。
实验9-1 结构体和共用体(1)1【实验目的】掌握结构体类型变量的定义和使用掌握结构体类型数组的概念和应用了解链表的概念和操作方法【实验要求】掌握结构体类型变量的定义和使用了解链表的概念和操作方法【实验环境】(1) Microsoft XP操作系统(2) Microsoft VC++ 6.0【实验内容】1、第几天/acmhome/problemdetail.do?&method=showdetail&id=1071描述:给定一个日期,输出这个日期是该年的第几天。
输入输入数据有多组,每组占一行,数据格式为YYYY-MM-DD组成,具体参见sample input ,另外,可以向你确保所有的输入数据是合法的。
输出:对于每组输入数据,输出一行,表示该日期是该年的第几天。
样例输入:2000-01-01样例输出:12、学生成绩/JudgeOnline/problem.php?id=1518题目描述现有有N个学生的数据记录,每个记录包括学号、姓名、三科成绩。
编写一个函数input,用来输入一个学生的数据记录。
编写一个函数print,打印一个学生的数据记录。
在主函数调用这两个函数,读取N条记录输入,再按要求输出。
N<100输入:学生数量N占一行每个学生的学号、姓名、三科成绩占一行,空格分开。
输出:每个学生的学号、姓名、三科成绩占一行,逗号分开。
样例输入2a100 zhblue 70 80 90b200 newsclan 90 85 75样例输出a100,zhblue,70,80,90b200,newsclan,90,85,753、平均分和最高分/JudgeOnline/problem.php?id=1519题目描述有N个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入N个学生的数据,要求打印出3门课的总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课成绩)输入:学生数量N占一行每个学生的学号、姓名、三科成绩占一行,空格分开。
一、结构体的说明及变量的定义1.结构体类型的说明由于结构体类型不是C语言提供的标准类型,为了能够使用结构体类型,必须先说明结构体类型,描述构成结构体类型的数据项(也称成员),以及各成员的类型。
其说明形式为:struct结构体名{数据类型成员1;数据类型成员n;};其中,struct是关键字,后面是结构体类型名,两者一起构成了结构体数据类型的标识符。
结构体的所有成员都必须放在一对大括号之中,每个成员的形式为:数据类型成员名;同一结构体中不同的成员不能使用相同的名字,但不同结构体类型中的成员名可以相同。
大括号后面的分号‚;‛不能省略。
如:struct person{char name[10];char sex;int age;int stature;};这里定义了一个结构体类型 person,该类型由4个成员构成。
注意:结构体类型说明中,只是描述该结构体类型的成员,说明了一种数据类型,并不分配空间。
要使用说明的结构体类型,必须定义相应的变量,才会分配空间。
2.结构体变量的定义结构体变量的定义有以下几种形式:?结构体类型的说明与定义分开。
例如说明了struct person之后,可以定义相应的变量:struct person p1, p2;定义了两个struct person变量,每个变量按结构类型中的成员分配相应的空间,每一个结构体变量所分配空间为所有成员占用空间之和。
如p1、p2所占用空间都为15byte。
?说明结构体类型的同时定义相应变量。
如:struct teacher{int number;char name[10];char sex;char profession[6];}t1, t2;在说明struct teacher类型的同时,定义了相应的两个变量t1、t2。
?直接定义结构体变量,没有结构体类型名。
如:struct{int No;char name[10];char sex;int age;}s1, s2;定义两个结构体变量s1、s2,他们都有4个成员,每个变量都占用15byte,但与第2种方式不同,没有给出结构体名,因而无法在其他地方再次使用该结构体类型定义别的变量。
C语⾔共同体结构体(Struct)是⼀种构造类型或复杂类型,它可以包含多个类型不同的成员。
在C语⾔中,还有另外⼀种和结构体⾮常类似的语法,叫做共⽤体(Union),它的定义格式为:union 共⽤体名{成员列表};共⽤体有时也被称为联合或者联合体,这也是 Union 这个单词的本意。
结构体和共⽤体的区别在于:结构体的各个成员会占⽤不同的内存,互相之间没有影响;⽽共⽤体的所有成员占⽤同⼀段内存,修改⼀个成员会影响其余所有成员。
结构体占⽤的内存⼤于等于所有成员占⽤的内存的总和(成员之间可能会存在缝隙),共⽤体占⽤的内存等于最长的成员占⽤的内存。
共⽤体使⽤了内存覆盖技术,同⼀时刻只能保存⼀个成员的值,如果对新的成员赋值,就会把原来成员的值覆盖掉。
共⽤体也是⼀种⾃定义类型,可以通过它来创建变量,例如:union data{int n;char ch;double f;};union data a, b, c;上⾯是先定义共⽤体,再创建变量,也可以在定义共⽤体的同时创建变量:union data{int n;char ch;double f;} a, b, c;如果不再定义新的变量,也可以将共⽤体的名字省略:union{int n;char ch;double f;} a, b, c;共⽤体 data 中,成员 f 占⽤的内存最多,为 8 个字节,所以 data 类型的变量(也就是 a、b、c)也占⽤ 8 个字节的内存,请看下⾯的演⽰:#include <stdio.h>union data{int n;char ch;short m;};int main(){union data a;printf("%d, %d\n", sizeof(a), sizeof(union data) );a.n = 0x40;printf("%X, %c, %hX\n", a.n, a.ch, a.m);a.ch = '9';printf("%X, %c, %hX\n", a.n, a.ch, a.m);a.m = 0x2059;printf("%X, %c, %hX\n", a.n, a.ch, a.m);a.n = 0x3E25AD54;printf("%X, %c, %hX\n", a.n, a.ch, a.m);return 0;}运⾏结果:4, 440, @, 4039, 9, 392059, Y, 20593E25AD54, T, AD54这段代码不但验证了共⽤体的长度,还说明共⽤体成员之间会相互影响,修改⼀个成员的值会影响其他成员。
C语言:结构体、共用体、枚举、类型重定义、位运算、预处理C语言除了提供象int,long,float,double、和char这样的基本数据类型之外,还支持数组、Struct、Union、和Enum数据类型。
结构体类型(struct)我们一个数组包含多个成员(元素),每个成员具有相同的数据类型。
一个结构体也能包含多个成员,但每个成员的数据类型可以不同。
例如:(a) struct Student { char Name[10], char Sex, int Age ;float Height; }(b) struct Student S1;这里,(a)定义了struct类型Student,而(b)定义了S1是Student类型的变量。
Student类型包含四个成员:Name,Sex,Age,Height,它们的数据类型分别是字符数组、字符型、整型、和浮点型。
以下是另一例子:struct DATE { int YEAR; int MONTH, int DAY ;}struct DATE d1,d2;注意,struct类型是泛指,而Student和DATE是两个特定的结构体类型。
当定义一结构体类型时,你要指定它的结构体类型名,当定义变量时,要同时写上关键字struct和结构体类型名。
定义结构体类型:我们struct 结构体类型名 { 成员1;成员2;…;成员n; }每一个成员可以是基本类型的变量、数组或指针变量,也可以是其他结构体或共用体类型的变量、数组或指针。
成员虽然不能是本结构体类型的变量,但可以是本结构体类型的指针变量。
定义结构体类型的变量:struct 结构体类型名变量名1,变量名2,…定义结构体变量时也可初始化,如:struct Student S1,S2={ “Zhang San”, ‟M‟, 19, 1.76 },S3;引用结构体类型的变量:(1)引用其成员:结构体变量名。
成员如 strcpy(,”Li Si”); S1.Sex=‟F‟; S1.Age=18; S1.Height=1.72;[0]=‟L‟; [1]=‟i‟; [2]=‟u‟; [3]=‟\0‟;S2.Height = S1.Height + 0.01 ;(1)引用整体就用变量的名字。