《结构体共用体》PPT课件.ppt
,继续,教学目的与要求,掌握结构体和共用体类型说明、结构体 和共用体变量的定义及初始化方法 掌握结构体与共用体变量成员的引用,返回,重点与难点,重点:结构体的基本概念 结构类型及变量的定义 共用体类型定义 共用体变量定义及引用难点:结构体和共用体的引用,继续,结 构 体 类 型,一个结构体类型可由多个成员(或称为域)的成分组成。与数组类型相比:,相同点:对于某个具体的结构体类型,其成员的数 量必须固定。,不同点:结构体中各个成员的类型可以相同也可以 不同,数组元素的类型必须完全相同;结 构体类型有许许多多,而不是只有一种。,继续,结 构 体 类 型,声明一个结构体类型的一般形式为:,struct 结构体名 类型名 成员名表;类型名 成员名表;;,注意:1.由于结构体名可以由程序员任意取定,因此 定义结构体变量的类型名不是唯一的,这一 点和标准类型名不同。,一起构成了类型名,2.最后的分号不能少。,继续,结 构 体 类 型,假设程序中有如下数据结构,则用户应在程序中建立如下的结构体:,struct employee char name15;char sex;int age;char addr20;float salary;,继续,结 构 体 类 型,定义结构体类型的变量有3种方法。,例如:struct employee char name15;char sex;int age;char addr20;float salary;a;,(1)先声明结构体类型,再定义变量名。,例如:struct employee a;struct employee*p;,(2)在定义一个结构体类型的同时,定义结构体变量。,继续,结 构 体 类 型,例如:struct char name15;char sex;int age;char addr20;float salary;a;,(3)不写结构体名而定义结构体变量(无名结构)。,注意:由于没有写出结构体类型的名字,不能再用它 定义别的变量。,继续,结 构 体 类 型,例如:struct date int month;int day;int year;,在定义一个结构体类型时,可以嵌套另一个已定义的结构体类型。,可以在表示职工基本情况的结构体类型中增加出生日期这一成员,即:struct employee char name15;char sex;struct date birthday;int age;char addr20;float salary;a;,继续,结 构 体 类 型,例如:struct date int month;int day;int year;,在内存中,结构体变量占据一片连续的存储单元。它占用的字节数是各个成员占用字节数的总和。,可以用sizeof运算符测出一个结构体变量的长度。,那么sizeof(struct date)的值为6。,说明:(1)C编译程序时,每个成员将依次取得对应的初值。(2)若只给前面若干个成员赋初值,则对后面未赋值的 成员,如果是数值型,系统将自动赋初值零;如果 是字符型,系统自动赋初值NULL(即0)。,继续,结 构 体 类 型,例:struct employee char name15;char sex;int age;char addr20;float salary;a=“Chengyi”,M,18,”Wuhan”,2000.00;,在定义结构体变量的同时,可直接将初值赋给结构体变量中的各个成员。,具体有以下三种形式可以引用结构体变量中的成员:(1)结构体变量名.成员名;(2)指针变量名成员名;(3)(*指针变量名).成员名。,称为“成员运算符”,说明:(1)此处指针变量与结构体变量是同一类型,并且已指向同类 型的变量。,继续,结 构 体 类 型,在引用结构体变量时,有以下两种情况:,1.引用结构体变量中的一个成员,称为“结构指向运算符”,(2)在运算符的优先级中,圆点运算符和箭头运算符属于最高 级别的运算符。,(1)若要引用结构体类型变量stud中的score成员项,可写成如下形式:stud.score pscore(*p).score(2)如果一个结构体类型中嵌套有另一个结构体类型,则访问内嵌结构体成员时,应采取逐级访问的方式。例如,,继续,结 构 体 类 型,例:struct student char name15;int num;struct date birthday;float score;stud,*p;p=,设有定义:struct char name15;int num;stud1,stud2=“Chengyi”,01;stud1=stud2;,注意:C不允许把一个结构体变量作为一个整体进行输入和输出。,继续,结 构 体 类 型,2.将一个结构体变量作为一个整体赋给另一具有相同 类型的结构体变量,例如:scanf(“%d”,对于结构体中的数据项必须逐个用相应的格式符像普通变量一样进行输入或输出。,返回,结 构 体 类 型,2.将一个结构体变量作为一个整体赋给另一具有相同 类型的结构体变量,例如:scanf(“%s,%d”,stud1.name,继续,共 用 体 类 型,共用体数据类型是指把不同的数据项放置在同一段内存存储单元中的数据类型。,注意:结构体变量中的成员各自占有自己的存储 空间,而共用体变量的所有成员都占有同 一段存储空间。,继续,共 用 体 类 型,对共用体类型的说明及对共用体变量的定义同结构体类型的说明、结构体变量的定义相似。,例如:union abc int i;float j;char ch;x,*p;,关键字,是共用体类型的标志。,共用体标识名,可以不出现。,继续,共 用 体 类 型,对共用体变量的定义有三种方式:,例如:union abc int i;float j;char ch;union abc x;union abc*p;,(1)先声明共用体类型,再定义变量名。,继续,共 用 体 类 型,例如:union abc int i;float j;char ch;x,*p;,(2)在定义共用体类型的同时,定义共用体变量。,继续,共 用 体 类 型,(3)不写共用体名而定义共用体变量(无名结构)。,例如:union int i;float j;char ch;x,*p;,注意:由于没有写出共用体类型的名字,不能 再用它定义别的变量。,继续,共 用 体 类 型,共用体类型占用字节数同成员中具有最多字节数的那个成员的大小相同;结构体类型占用字节数是各个成员字节数之和。,例如:union un int i;double y;struct st char a10;union un b;printf(“%dn”,sizeof(struct st);,继续,共 用 体 类 型,1.共用体变量中成员的引用,对共用体变量中成员的引用,其形式与结构体变量一样,可使用以下三种方式之一:(1)共用体变量名.成员名;(2)指针变量名成员名;(3)(*指针变量名).成员名。,继续,共 用 体 类 型,1.共用体变量中成员的引用,例如:union int i;float j;char ch;x,*p;p=,则x.i,x.j,pi,(*p).j等都是合法的引用形式。,注意:不能只引用共用体变量。,scanf(“%d”,返回,共 用 体 类 型,2.共用体变量的整体赋值,新的ANSI C标准允许在两个同类型的共用体变量之间赋值。,例如:union abc int i;int j;x,y;x.i=3;y=x;,返回,作 业,实验教程:P113:8.3;8.5;8.8;8.9,