《第七章结构与联合精选文档.ppt》由会员分享,可在线阅读,更多相关《第七章结构与联合精选文档.ppt(46页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第七章结构与联合第七章结构与联合2005年3月1本讲稿第一页,共四十六页本章主要内容本章主要内容l l本章主要内容包括:本章主要内容包括:l l结构体的概念结构体的概念 l l结构体类型变量的定义方法结构体类型变量的定义方法l l结构体类型变量的使用形式和初始化结构体类型变量的使用形式和初始化l l结构体数组结构体数组l l结构体与函数结构体与函数 联合体联合体2005年3月2本讲稿第二页,共四十六页引言引言在实际的处理对象中,有许多信息是由多在实际的处理对象中,有许多信息是由多个个不同类型的数据组合不同类型的数据组合在一起进行描述,而且在一起进行描述,而且这些不同类型的数据是互相联系组成了一
2、个这些不同类型的数据是互相联系组成了一个有机有机的整体的整体。此时,就要用到一种新的构造类型数据。此时,就要用到一种新的构造类型数据结构体结构体(structure),),简称结构。简称结构。结构体的使用为处理复杂的数据结构(如动态结构体的使用为处理复杂的数据结构(如动态数据结构等)提供了有效的手段,而且,它们为数据结构等)提供了有效的手段,而且,它们为函数间传递不同类型的数据提供了方便。函数间传递不同类型的数据提供了方便。同时也介绍在同时也介绍在相同存储区域内存储不同数据相同存储区域内存储不同数据类型类型的构造类型的构造类型共用体共用体(也称联合体)的相(也称联合体)的相关概念。关概念。20
3、05年3月3本讲稿第三页,共四十六页7.1 结构体的概念(续)结构体的概念(续)结构体结构体是用户是用户是用户是用户自定义的新数据类型自定义的新数据类型,在结构体,在结构体中可以中可以包含包含若干个若干个若干个若干个不同数据类型不同数据类型和和不同意义的数据项不同意义的数据项不同意义的数据项不同意义的数据项(当然也可以相同),从而使这些数据项组合起来反映(当然也可以相同),从而使这些数据项组合起来反映(当然也可以相同),从而使这些数据项组合起来反映(当然也可以相同),从而使这些数据项组合起来反映某一个信息。某一个信息。某一个信息。某一个信息。结构体结构体结构体结构体相当于相当于相当于相当于CO
4、BOL 和和PASCAL等高级语言中等高级语言中的的“记录记录记录记录”。例如,可以定义一个职工例如,可以定义一个职工例如,可以定义一个职工例如,可以定义一个职工workerworker结构体结构体,在这个,在这个结构体中包括职工编号、姓名、性别、年龄、工资、结构体中包括职工编号、姓名、性别、年龄、工资、家庭住址、联系电话。这样就可以用一个结构体数家庭住址、联系电话。这样就可以用一个结构体数据类型的变量来存据类型的变量来存放某个职工的所有相关信息。放某个职工的所有相关信息。放某个职工的所有相关信息。放某个职工的所有相关信息。并且,用户自定义的数据类型并且,用户自定义的数据类型worker也可以
5、与也可以与intint、doubledouble等基本数据类型一样,等基本数据类型一样,等基本数据类型一样,等基本数据类型一样,用来作为定义其他用来作为定义其他用来作为定义其他用来作为定义其他变量的数据类型。变量的数据类型。变量的数据类型。变量的数据类型。2005年3月4本讲稿第四页,共四十六页7.1 结构体的概念(续)结构体的概念(续)定义一个结构体类型的一般形式为:定义一个结构体类型的一般形式为:定义一个结构体类型的一般形式为:定义一个结构体类型的一般形式为:struct struct 结构体名结构体名结构体名结构体名 数据类型成员名数据类型成员名数据类型成员名数据类型成员名1 1;数据类
6、型成员名数据类型成员名数据类型成员名数据类型成员名2 2;:数据类型成员名数据类型成员名数据类型成员名数据类型成员名n n;用分号用分号“;”作为结束符。整个结构的定义也用分作为结束符。整个结构的定义也用分号作为结束符。号作为结束符。“成员表列成员表列成员表列成员表列”或或或或“域表域表域表域表”命名规则与变量名相同命名规则与变量名相同命名规则与变量名相同命名规则与变量名相同基本变量类型和数组类型,也基本变量类型和数组类型,也基本变量类型和数组类型,也基本变量类型和数组类型,也可以是指针类型,或者可以是指针类型,或者可以是指针类型,或者可以是指针类型,或者是一个结构体类型。是一个结构体类型。是
7、一个结构体类型。是一个结构体类型。2005年3月5本讲稿第五页,共四十六页7.1 结构体的概念(续)结构体的概念(续)例如:定义一个职工例如:定义一个职工例如:定义一个职工例如:定义一个职工workeworker r结构体如下:结构体如下:struct workerstruct worker long number;long number;char name20;char sex;/sex是成员名是成员名 int age;float salary;char address80;char address80;char phone20;/注意分号不要省略注意分号不要省略注意分号不要省略注意分号不要
8、省略int sex=10;/sexint sex=10;/sex是变量名是变量名 2005年3月6本讲稿第六页,共四十六页7.1 结构体的概念(续)结构体的概念(续)结构体类型中的成员名可以与程序中的变量名相同,结构体类型中的成员名可以与程序中的变量名相同,结构体类型中的成员名可以与程序中的变量名相同,结构体类型中的成员名可以与程序中的变量名相同,二者并不代表同一对象二者并不代表同一对象,编译程序可以自动对它们,编译程序可以自动对它们,编译程序可以自动对它们,编译程序可以自动对它们进行区分。进行区分。进行区分。进行区分。最后,总结一下结构体类型的特点:最后,总结一下结构体类型的特点:最后,总结
9、一下结构体类型的特点:最后,总结一下结构体类型的特点:(1)结构体类型是用户自定义构造的。)结构体类型是用户自定义构造的。(2)它它由由若若干干不不同同的的基基本本数数据据类类型型的的数数据据构构成。成。(3 3)它属于)它属于)它属于)它属于C+语言的一种数据类型,与整型、语言的一种数据类型,与整型、语言的一种数据类型,与整型、语言的一种数据类型,与整型、实型相当。因此,实型相当。因此,实型相当。因此,实型相当。因此,定义它时不分配空间,只有用它定定义它时不分配空间,只有用它定定义它时不分配空间,只有用它定定义它时不分配空间,只有用它定义变量时才分配空间。义变量时才分配空间。义变量时才分配空
10、间。义变量时才分配空间。2005年3月7本讲稿第七页,共四十六页7.2 结构体类型变量的定义方法结构体类型变量的定义方法 结结构构体体只只是是用用户户自自定定义义的的一一种种数数据据类类型型,因因此此要要通通过过定定义义结结构构体体类类型型的的变变量量来来使使用用这这种种类类型型。通通通通常常常常有有有有三三三三种种种种形形形形式式式式来来来来定定定定义义义义一一个个结结构构体体类类型型变变量量,分分别别说说明如下:明如下:7.2.1 7.2.1 先定义结构体类型再定义变量名先定义结构体类型再定义变量名先定义结构体类型再定义变量名先定义结构体类型再定义变量名 这这是是C+语语语语言言言言中中中
11、中定定定定义义义义结结结结构构构构体体体体类类类类型型型型变变变变量量量量最最最最常常常常见见见见的的的的方方方方式式式式,一般语法格式如下:一般语法格式如下:一般语法格式如下:一般语法格式如下:struct struct 结构体名结构体名结构体名结构体名 成员表列;成员表列;成员表列;成员表列;struct 结构体名结构体名结构体名结构体名 变量名;变量名;变量名;变量名;2005年3月8本讲稿第八页,共四十六页7.2.1 先定义结构体类型再定义变量(续)先定义结构体类型再定义变量(续)例如,定义几个职工变量:例如,定义几个职工变量:例如,定义几个职工变量:例如,定义几个职工变量:struc
12、t workerstruct worker long number;long number;char name20;char sex;char sex;int age;int age;float salary;float salary;char address80;char phone20;struct worker worker1,worker2;struct worker worker1,worker2;2005年3月9本讲稿第九页,共四十六页7.2.1 先定义结构体类型再定义变(续)先定义结构体类型再定义变(续)注注注注意意意意:“struct struct workerworker”代
13、代代代表表表表类类类类型型型型名名名名,不不不不能能能能分分分分开开开开写为:写为:写为:写为:struct worker1,worker2;/错误,没有指明是哪种结构体类型错误,没有指明是哪种结构体类型 或或或或 worker worker1,worker2;/错误,没有错误,没有structstruct关键字关键字 /系统不认为系统不认为系统不认为系统不认为worker是结构体类型是结构体类型是结构体类型是结构体类型 为为了了使使用用上上的的方方便便,程程序序员员通通常常用用一一一一个个个个符符符符号号号号常常常常量量量量代表一个结构体类型代表一个结构体类型代表一个结构体类型代表一个结构体
14、类型。即在程序开头加上下列语句:。即在程序开头加上下列语句:#define#define WORKERWORKER struct worker;这样在程序中,这样在程序中,这样在程序中,这样在程序中,WORKERWORKER与与struct worker完全完全等效。等效。2005年3月10本讲稿第十页,共四十六页7.2.1 先定义结构体类型再定义变(续)先定义结构体类型再定义变(续)例如:例如:例如:例如:WORKERWORKER long number;long number;char name20;char name20;char sex;char sex;int age;int age
15、;float salary;float salary;char address80;char address80;char phone20;char phone20;WORKER worker1,worker2;WORKER worker1,worker2;此时,可以直接用此时,可以直接用此时,可以直接用此时,可以直接用WORKERWORKER定义定义定义定义worker1worker1、worker2worker2两个变量,而不必再写关键字两个变量,而不必再写关键字两个变量,而不必再写关键字两个变量,而不必再写关键字structstruct。2005年3月11本讲稿第十一页,共四十六页7.2
16、.2 在定义类型的同时定义变量在定义类型的同时定义变量如如果果程程序序规规模模比比较较大大,往往往往将将对对对对结结结结构构构构体体体体类类类类型型型型的的的的定定定定义义义义集集集集中中中中写写写写入入入入到到到到一一一一个个个个头头头头文文文文件件件件(以以以以.h.h为为后后缀缀)中中。哪哪哪哪个个个个源源源源文文文文件件件件需需需需用用用用到到到到此此此此结结结结构构构构体体体体类类类类型型型型则则则则可可可可用用用用#include命命命命令令令令将将该该文文件件包含到本文件中包含到本文件中。这样做。这样做。这样做。这样做便于程序的修改和使用便于程序的修改和使用便于程序的修改和使用便
17、于程序的修改和使用。这种形式的定义的一般形式为:这种形式的定义的一般形式为:这种形式的定义的一般形式为:这种形式的定义的一般形式为:struct 结构体名结构体名 成员表列;成员表列;变量名;变量名;2005年3月12本讲稿第十二页,共四十六页7.2.2 在定义类型的同时定义变量(续)在定义类型的同时定义变量(续)例如:例如:struct worker long number;long number;char name20;char name20;char sex;int age;int age;float salary;char address80;char phone20;worker1,
18、worker2;此例与前例作用相同,都定义了两个变此例与前例作用相同,都定义了两个变此例与前例作用相同,都定义了两个变此例与前例作用相同,都定义了两个变worker1、worker2worker2,它们是结构体类型,它们是结构体类型struct worker。2005年3月13本讲稿第十三页,共四十六页7.2.3 直接定义结构类型变量直接定义结构类型变量其一般形式为:其一般形式为:struct /没有结构体名没有结构体名没有结构体名没有结构体名 成员表列成员表列 变量名变量名;2005年3月14本讲稿第十四页,共四十六页7.2.3 直接定义结构类型变量(续)直接定义结构类型变量(续)例如:例如
19、:例如:例如:structstruct long number;long number;char name20;char name20;char sex;char sex;int age;int age;float salary;float salary;char address80;char address80;char phone20;char phone20;worker1,worker2;worker1,worker2;2005年3月15本讲稿第十五页,共四十六页7.2.3 直接定义结构类型变量(续)直接定义结构类型变量(续)一一个个结结结结构构构构体体体体变变变变量量量量占占占占用用
20、用用内内内内存存存存的的的的实实实实际际际际大大大大小小小小,也也也也可可可可以以以以利利利利用用用用sizeofsizeof运算运算求出。它的运算表达式为:求出。它的运算表达式为:求出。它的运算表达式为:求出。它的运算表达式为:sizeofsizeof(运算量)/求出给定的运算量占用内存空间的字节数求出给定的运算量占用内存空间的字节数求出给定的运算量占用内存空间的字节数求出给定的运算量占用内存空间的字节数其中其中运算量运算量运算量运算量可以是可以是变量、数组或结构体变量,变量、数组或结构体变量,也可以是数据类型的名称。也可以是数据类型的名称。例如:例如:sizeof(struct worke
21、r)sizeof(struct worker)sizeof(worker1)sizeof(worker1)2005年3月16本讲稿第十六页,共四十六页7.3 结构体变量的使用形式和初始化结构体变量的使用形式和初始化7.3.1 7.3.1 结构体变量的使用形式在在在在定定定定义义义义了了了了结结结结构构构构体体体体变变变变量量量量以以以以后后后后,就就就就可可可可以以以以使使使使用用用用这这这这个个个个变变变变量量量量。结结结结构构构构体体体体变变变变量量量量是是是是不不不不同同同同数数数数据据据据类类类类型型型型的的的的若若若若干干干干数数数数据据据据的的的的集集集集合合合合体体体体。在在在在
22、程程程程序序序序中中中中使使使使用用用用结结结结构构构构体体体体变变变变量量量量时时时时,一一一一般般般般情情情情况况况况下下下下不不不不能能能能把把把把它它它它作作作作为为为为一一一一个个个个整整整整体体体体参参参参加加加加数数数数据据据据处处处处理理理理,而而而而参参参参加加加加各各各各种种种种运运运运算算算算和和和和操操操操作作作作的的的的是是是是结结结结构构构构体体体体变变变变量量量量的的的的各各各各个个个个成成成成员员员员项项项项数据数据数据数据。结构体变量的成员用以下一般形式表示:结构体变量的成员用以下一般形式表示:结构体变量的成员用以下一般形式表示:结构体变量的成员用以下一般形式
23、表示:结构体变量名结构体变量名结构体变量名结构体变量名.成员名成员名成员名成员名例如,上节给出的结构体变量例如,上节给出的结构体变量例如,上节给出的结构体变量例如,上节给出的结构体变量worker1worker1具有具有具有具有下列七个成员:下列七个成员:下列七个成员:下列七个成员:worker1.numberworker1.number;worker1.nameworker1.name;worker1.sexworker1.sex;worker1.ageworker1.age;worker1.salaryworker1.salary;worker1.addressworker1.addres
24、s;worker1.phoneworker1.phone 2005年3月17本讲稿第十七页,共四十六页7.3.1 结构体变量的使用形式(续)结构体变量的使用形式(续)在在定定义义了了结结构构体体变变量量后后,就就可可以以用用不不同同的的赋赋值值方法对结构体变量的每个成员赋值方法对结构体变量的每个成员赋值。例如:。例如:strcpy(worker1.name,”Zhang San”);worker1.age=26;strcpy(worker1.phone,”1234567”);strcpy(worker1.phone,”1234567”);worker1.sex=m;worker1.sex=m;
25、:除此之外,还可以除此之外,还可以引用结构体变量成员的地址引用结构体变量成员的地址引用结构体变量成员的地址引用结构体变量成员的地址以及成员中的元素。以及成员中的元素。以及成员中的元素。以及成员中的元素。例如:引用结构体变量成员的首例如:引用结构体变量成员的首例如:引用结构体变量成员的首例如:引用结构体变量成员的首地址地址地址地址&worker1.name;引用结构体变量成员的第二个;引用结构体变量成员的第二个;引用结构体变量成员的第二个;引用结构体变量成员的第二个字符字符字符字符worker1.name1worker1.name1;引用结构体变量的首地址;引用结构体变量的首地址&worker1
26、。2005年3月18本讲稿第十八页,共四十六页7.3.1 结构体变量的使用形式(续)结构体变量的使用形式(续)在在在在使使使使用用用用结结结结构构构构体体体体类类类类型型型型变变变变量量量量时时时时有有有有以以以以下下下下几几几几点点点点需需需需要要要要加加加加以以以以注注注注意:意:意:意:(1 1)不不能能将将一一个个结结构构体体类类型型变变量量作作为为一一个个整整体体加加以以引引用用,而而只只能能对对结结构构体体类类型型变变量量中中的的各各各各个个个个成员分别引用成员分别引用成员分别引用成员分别引用。例例如如,对对上上面面定定义义的的结结构构体体类类型型变变量量wanwan,下下列引用都
27、是错误的:列引用都是错误的:coutwan;coutwan;但是可以如下引用:但是可以如下引用:但是可以如下引用:但是可以如下引用:coutwan.name;cinwan.name;2005年3月19本讲稿第十九页,共四十六页7.3.1 结构体变量的使用形式(续)结构体变量的使用形式(续)(2)如如果果成成员员本本身身又又属属一一个个结结构构体体类类型型,则则要要用用若若干干个个成成员员运运算算符符,一一级级一一级级地地找找到到最最低低的的一一级级成成员员。只只能能对对最最低低级级的的成成员员进进行行赋赋值值或或存存取取以以及及运运算算。例例例例如如如如,对对对对上上上上面面面面定定定定义义义
28、义的的的的结结结结构构构构体体体体类类类类型型型型变变变变量量量量worker1,可可可可以以以以这样访问各成员:这样访问各成员:这样访问各成员:这样访问各成员:worker1.ageworker1.nameworker1.nameworker1.birthday.yearworker1.birthday.monthworker1.birthday.dayworker1.birthday.day注意:不能用注意:不能用注意:不能用注意:不能用worker1.birthday来访问来访问worker1worker1变量中的成员变量中的成员变量中的成员变量中的成员birthday,因为,因为bir
29、thdaybirthday本身是一个结本身是一个结本身是一个结本身是一个结构体变量。构体变量。构体变量。构体变量。2005年3月20本讲稿第二十页,共四十六页7.3.1 结构体变量的使用形式(续)结构体变量的使用形式(续)(3)对对成成员员变变量量可可以以像像普普通通变变量量一一样样进进行行各各种种运运算算(根根据据其其类类型型决决定定可可以以进进行行的的运运算算)。例例如:如:worker2.age=worker1.age;sum=worker1.age+worker2.age;worker1.age+;worker1.age+;(4)在数组中,数组是不能彼此赋值的,而结在数组中,数组是不能
30、彼此赋值的,而结构体类型变量可以相互赋值。构体类型变量可以相互赋值。在在C+C+程序中,程序中,程序中,程序中,同一结构体类型同一结构体类型的结构体变量之的结构体变量之间间允许相互赋值允许相互赋值允许相互赋值允许相互赋值,而,而不同结构体类型不同结构体类型的结构体变量的结构体变量之间之间不允许相互赋值不允许相互赋值,即使两者包含有同样的成员。,即使两者包含有同样的成员。2005年3月21本讲稿第二十一页,共四十六页7.3.2 结构体变量的初始化结构体变量的初始化 与与其其他他类类型型变变量量一一样样,也也可可以以给给结结构构体体的的每每个个成成员员赋赋初初值值,这这称称为为结结结结构构构构体体
31、体体的的的的初初初初始始始始化化化化。有有两两种种初初始始化化形形式式,一一一一种种种种是是是是在在在在定定定定义义义义结结结结构构构构体体体体变变变变量量量量时时时时进进进进行行行行初初初初始始始始化化化化,一一一一般语法格式如下:般语法格式如下:般语法格式如下:般语法格式如下:struct 结构体名结构体名结构体名结构体名 变量名变量名变量名变量名=初始数据表初始数据表初始数据表初始数据表;另另一一种种是是在在定定义义结结构构体体类类型型时时进进行行结结构构体体变变量量的初始化。的初始化。一般语法格式如下:一般语法格式如下:一般语法格式如下:一般语法格式如下:struct struct 结
32、构体名结构体名 成员表列;成员表列;成员表列;成员表列;变量名变量名=初始数据表初始数据表初始数据表初始数据表;2005年3月22本讲稿第二十二页,共四十六页7.3.2 结构体变量的初始化(续)结构体变量的初始化(续)例例例例如如如如,前前前前述述述述studentstudent结结构构体体类类型型的的结结构构体体变变量量wanwan在说明时可以初始化如下:在说明时可以初始化如下:struct student wan=”Wan Jun”,m,20,”SuZhou Road No.100”;它它它它所所所所实实实实现现现现的的的的功功功功能能能能,与与与与下下下下列列列列分分分分别别别别对对对对
33、结结结结构构构构体体体体变变变变量量量量的的的的每每每每个个个个成员赋值所实现的功能相同:成员赋值所实现的功能相同:成员赋值所实现的功能相同:成员赋值所实现的功能相同:strcpy(wan.name,”Wan Jun”);wan.sex=m;wan.sex=m;wan.age=20;wan.age=20;wan.addr=”SuZhou Road No.100”;2005年3月23本讲稿第二十三页,共四十六页7.3.2 结构体变量的初始化(续)结构体变量的初始化(续)与数组的初始化特性相同,结构体的初始化仅与数组的初始化特性相同,结构体的初始化仅限于外部的和限于外部的和static型结构体。也
34、就是说,在函型结构体。也就是说,在函数内部对结构体进行初始化时,必须指定该结构数内部对结构体进行初始化时,必须指定该结构体为体为static型。对缺省存储类型的型。对缺省存储类型的auto型结构体不型结构体不能在函数内部对它们进行初始化。能在函数内部对它们进行初始化。2005年3月24本讲稿第二十四页,共四十六页7.4 结构体数组结构体数组具有相同结构体类型的结构体变量也可以组成数组,具有相同结构体类型的结构体变量也可以组成数组,具有相同结构体类型的结构体变量也可以组成数组,具有相同结构体类型的结构体变量也可以组成数组,称它们为称它们为称它们为称它们为结构体数组。结构体数组。结构体数组。结构体
35、数组。结构体数组的每一个数组元素结构体数组的每一个数组元素结构体数组的每一个数组元素结构体数组的每一个数组元素都是都是都是都是结构体类型的数据结构体类型的数据,它们都分别,它们都分别包括各个成员包括各个成员包括各个成员包括各个成员(分量)项(分量)项(分量)项(分量)项。7.4.1 7.4.1 结构体数组的定义定义结构体数组的方法和定义结构体变量的方法相定义结构体数组的方法和定义结构体变量的方法相定义结构体数组的方法和定义结构体变量的方法相定义结构体数组的方法和定义结构体变量的方法相仿,只需说明其为数组即可。可以采用三种方法:仿,只需说明其为数组即可。可以采用三种方法:仿,只需说明其为数组即可
36、。可以采用三种方法:仿,只需说明其为数组即可。可以采用三种方法:2005年3月25本讲稿第二十五页,共四十六页7.4.1 结构体数组的定义结构体数组的定义1.1.先定义结构体类型,再用它定义结构体数组。先定义结构体类型,再用它定义结构体数组。先定义结构体类型,再用它定义结构体数组。先定义结构体类型,再用它定义结构体数组。结构体数组的定义形式如下:结构体数组的定义形式如下:结构体数组的定义形式如下:结构体数组的定义形式如下:struct struct 结构体名结构体名结构体名结构体名 成员表列;成员表列;成员表列;成员表列;struct struct 结构体名结构体名结构体名结构体名 结构体数组
37、名结构体数组名结构体数组名结构体数组名n n;例如:例如:struct student char name20;char sex;int age;char addr20;struct student stu3;2005年3月26本讲稿第二十六页,共四十六页7.4.1 结构体数组的定义结构体数组的定义(续续)2.2.在定义结构体类型同时定义结构体数组。在定义结构体类型同时定义结构体数组。在定义结构体类型同时定义结构体数组。在定义结构体类型同时定义结构体数组。结构体数组的定义形式如下:结构体数组的定义形式如下:结构体数组的定义形式如下:结构体数组的定义形式如下:struct struct 结构体名
38、结构体名结构体名结构体名 成员表列;成员表列;成员表列;成员表列;数组名数组名数组名数组名 元素个数元素个数元素个数元素个数;例如:例如:struct student char name20;char sex;int age;char addr20;stu3;2005年3月27本讲稿第二十七页,共四十六页7.4.1 结构体数组的定义结构体数组的定义(续续)3.3.直接定义结构体数组直接定义结构体数组结构体数组的定义形式如下:结构体数组的定义形式如下:结构体数组的定义形式如下:结构体数组的定义形式如下:struct /struct /没有结构体名没有结构体名没有结构体名没有结构体名 成员表列;成
39、员表列;成员表列;成员表列;数组名数组名数组名数组名 元素个数元素个数元素个数元素个数;例如:例如:struct char name20;char sex;int age;char addr20;stu3;2005年3月28本讲稿第二十八页,共四十六页7.4.1 结构体数组的定义结构体数组的定义(续续)结构体数组名表示该结构体数组的存储首地址。结构体数组名表示该结构体数组的存储首地址。结构体数组适合于处理由若干具有相同关系的结构体数组适合于处理由若干具有相同关系的结构体数组适合于处理由若干具有相同关系的结构体数组适合于处理由若干具有相同关系的数据数据组成的数据集合体组成的数据集合体。用结构体数
40、组处理数据时。用结构体数组处理数据时。用结构体数组处理数据时。用结构体数组处理数据时可以可以使用循环,从而使程序十分简炼使用循环,从而使程序十分简炼。2005年3月29本讲稿第二十九页,共四十六页7.4.2 结构体数组的初始化结构体数组的初始化结结结结构构构构体体体体数数数数组组组组在在在在定定定定义义义义的的的的同同同同时时时时也也也也可可可可以以以以进进进进行行行行初初初初始始始始化化化化,并并且且与与结结构构体体变变量量的的初初始始化化规规定定相相同同,只只只只能能能能对对对对全全全全局局局局的的的的或静态存储类别的结构体数组初始化。或静态存储类别的结构体数组初始化。或静态存储类别的结构
41、体数组初始化。或静态存储类别的结构体数组初始化。结构体数组初始化的一般形式是:结构体数组初始化的一般形式是:结构体数组初始化的一般形式是:结构体数组初始化的一般形式是:struct struct 结构体名结构体名结构体名结构体名 成员表列;成员表列;struct 结构体名结构体名 数组名数组名 元素个数元素个数=初始数据表初始数据表;2005年3月30本讲稿第三十页,共四十六页7.4.2 结构体数组的初始化(续)结构体数组的初始化(续)或者:或者:或者:或者:struct struct 结构体名结构体名结构体名结构体名 成员表列;成员表列;成员表列;成员表列;数组名数组名元素个数元素个数元素个
42、数元素个数=初始数据表初始数据表;在对结构体数组进行初始化时,在对结构体数组进行初始化时,在对结构体数组进行初始化时,在对结构体数组进行初始化时,方括号方括号方括号方括号 中元素个中元素个数可以不指定数可以不指定。编译时,系统会根据给出初始的。编译时,系统会根据给出初始的结构结构体常量的个数体常量的个数来来确定确定数组元素的个数数组元素的个数。由由由由于于于于结结结结构构构构体体体体变变变变量量量量是是是是由由由由若若若若干干干干不不不不同同同同类类类类型型型型的的的的数数数数据据据据组组组组成成成成,而而而而结结结结构构构构体体体体数数数数组组组组又又又又是是是是由由由由若若若若干干干干结结
43、结结构构构构体体体体变变变变量量量量组组组组成成成成。所所所所以以以以要要要要特特特特别别别别注注意意包包围围在在大大括括号号中中的的初初始始数数据据的的顺顺序序序序,以以以以及及及及它它它它们们们们与与与与各个成员项间的对应关系。各个成员项间的对应关系。各个成员项间的对应关系。各个成员项间的对应关系。2005年3月31本讲稿第三十一页,共四十六页7.4.3 结构体数组的使用(续)结构体数组的使用(续)一一一一个个个个结结结结构构构构体体体体数数数数组组组组的的的的元元元元素素素素相相相相当当当当于于于于一一一一个个个个结结结结构构构构体体体体变变变变量量量量,因因因因此此此此前前前前面面面面
44、介介介介绍绍绍绍的的的的有有有有关关关关结结结结构构构构体体体体变变变变量量量量的的的的规规规规则则则则也也也也适适适适应应应应于于于于结结结结构构构构体体体体数数数数组组组组元元元元素素素素。以以上上面面定定义义的的结结构构体体数数组组stu3为为例例说说明明对对结构体数组的引用:结构体数组的引用:(1)引用某一元素中的成员。)引用某一元素中的成员。若要引用数组第二个元素的若要引用数组第二个元素的若要引用数组第二个元素的若要引用数组第二个元素的name成员,则可写为:成员,则可写为:stu1.namestu1.name若若 数数 组组 已已 如如 前前 所所 示示 进进 行行 了了 初初 始
45、始 化化,则则stu1.name的值为的值为的值为的值为“Liu Yong”。2005年3月32本讲稿第三十二页,共四十六页7.4.3 结构体数组的使用(续)结构体数组的使用(续)(2)可可可可以以以以将将将将一一一一个个个个结结结结构构构构体体体体数数数数组组组组元元元元素素素素值值值值赋赋赋赋给给给给同同同同一一一一结结结结构构构构体体体体类类类类型型型型的的的的数数数数组组组组中中中中的的的的另另另另一一一一个个个个元元元元素素素素,或或或或赋赋赋赋给给给给同同同同一一一一类类类类型型型型的的的的变变变变量量量量。如:如:struct student stu3,student1;现现现现
46、在在在在定定定定义义义义了了了了一一一一个个个个结结结结构构构构体体体体类类类类型型型型的的的的数数数数组组组组,它它它它有有有有3个个个个元元元元素素素素,又又又又定定定定义义义义了了了了一一一一个个个个结结结结构构构构体体体体类类类类型型型型变变变变量量量量student1student1,则则下下面面的赋值是合法的。的赋值是合法的。student1=stu0;student1=stu0;stu0=stu1;stu0=stu1;stu1=student1;2005年3月33本讲稿第三十三页,共四十六页7.4.3 结构体数组的使用(续)结构体数组的使用(续)(3)不不能能把把结结构构体体数数
47、组组元元素素作作为为一一个个整整体体直直接接进行输入输出。如:进行输入输出。如:coutstu0;coutstu0;都是错误的。都是错误的。都是错误的。都是错误的。只能以单个成员为对象进行输入输出只能以单个成员为对象进行输入输出,如:,如:cinstu0.name;cinstu1.num;cinstu1.num;coutstu0.name;coutstu0.name;coutstu1.num;cout-”表示。表示。例例例例如如如如,前前前前面面面面定定定定义义义义了了了了a a,b,c c为为为为共共共共用用用用体体体体类类类类型型型型变变变变量量量量,下面的使用形式是正确的:下面的使用形式
48、是正确的:下面的使用形式是正确的:下面的使用形式是正确的:a.i 引用共用体变量中的整型变量引用共用体变量中的整型变量引用共用体变量中的整型变量引用共用体变量中的整型变量ia.c 引用共用体变量中的字符变量引用共用体变量中的字符变量引用共用体变量中的字符变量引用共用体变量中的字符变量ca.f 引用共用体变量中的实型变量引用共用体变量中的实型变量f2005年3月43本讲稿第四十三页,共四十六页7.6.2 共用体变量的使用形式(续)共用体变量的使用形式(续)不不不不能能能能只只只只引引引引用用用用共共共共用用用用体体体体类类类类型型型型变变变变量量量量,例例例例如如如如:couta是是是是错错错错
49、误误误误的的的的,a a的的的的存存存存储储储储区区区区有有有有好好好好几几几几种种种种类类类类型型型型,分分分分别别别别占占占占不不不不同同同同长长长长度度度度的的的的存存存存储储储储区区区区,仅仅仅仅写写写写共共共共用用用用体体体体类类类类型型型型变变变变量量量量名名名名a难难难难以以以以使使使使系系系系统统统统确确确确定定定定究究究究竟竟竟竟输输输输出出出出的的的的 是是是是 那那那那 一一一一 个个个个 成成成成 员员员员 的的的的 值值值值。应应 该该 写写 成成couta.icouta.i或或或或 者者者者couta.c等。等。等。等。在在使使用用共共用用体体类类型型变变量量的的数
50、数据据时时要要注注意意:在在共共用用体体类类型型变变量量中中起起起起作作作作用用用用的的的的成成成成员员员员是是是是最最最最后后后后一一一一次次次次存存存存放放放放的的的的成成成成员员员员,在在存存入入一一个个新新的的成成员员后后原原有有的的成成员员就就失失去去作作用用。如如有有以下赋值语句:以下赋值语句:a a.i=1;i=1;a.c=a;a.c=a;a.f=1.5;在完成以上三个赋值运算以后,在完成以上三个赋值运算以后,在完成以上三个赋值运算以后,在完成以上三个赋值运算以后,a.f是有效的,是有效的,a.ia.i和和和和a.ca.c已经无意义了。已经无意义了。2005年3月44本讲稿第四十