《第8章 结构体类型和联合体类型.ppt》由会员分享,可在线阅读,更多相关《第8章 结构体类型和联合体类型.ppt(47页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、C C语言程序设计语言程序设计n nC C C C程序设计入门程序设计入门程序设计入门程序设计入门 n nC C C C程序的控制结构程序的控制结构程序的控制结构程序的控制结构 n n函数与程序结构函数与程序结构函数与程序结构函数与程序结构 n n指针与函数指针与函数指针与函数指针与函数 n n数组及应用数组及应用数组及应用数组及应用 n n字符串及其应用字符串及其应用字符串及其应用字符串及其应用 n n指针与数组指针与数组指针与数组指针与数组 n n结构体类型和联合体类型结构体类型和联合体类型结构体类型和联合体类型结构体类型和联合体类型 n n位运算与枚举类型位运算与枚举类型位运算与枚举类型
2、位运算与枚举类型 n n文件文件文件文件 结构体类型和联合体类型结构体类型和联合体类型 n n结构体数据类型的根本概念结构体数据类型的根本概念结构体数据类型的根本概念结构体数据类型的根本概念 n n结构体数组结构体数组结构体数组结构体数组 n n结构体数据类型与指针的关系结构体数据类型与指针的关系结构体数据类型与指针的关系结构体数据类型与指针的关系 n n联合体数据类型的根本概念联合体数据类型的根本概念联合体数据类型的根本概念联合体数据类型的根本概念 结构体数据类型的根本概念结构体数据类型的根本概念 n n结构体数据类型的根本概念结构体数据类型的根本概念结构体数据类型的根本概念结构体数据类型的
3、根本概念n n问题的提出问题的提出问题的提出问题的提出n n在实际的计算机应用问题中特别是在事务处理中,在实际的计算机应用问题中特别是在事务处理中,在实际的计算机应用问题中特别是在事务处理中,在实际的计算机应用问题中特别是在事务处理中,常常需要将不同的数据组合成为一个有机的整体,常常需要将不同的数据组合成为一个有机的整体,常常需要将不同的数据组合成为一个有机的整体,常常需要将不同的数据组合成为一个有机的整体,形成一种能够既表示出各个数据又表示出这些数据形成一种能够既表示出各个数据又表示出这些数据形成一种能够既表示出各个数据又表示出这些数据形成一种能够既表示出各个数据又表示出这些数据之间关系的构
4、造数据类型。之间关系的构造数据类型。之间关系的构造数据类型。之间关系的构造数据类型。n n解决方法解决方法解决方法解决方法n n在在在在C C程序设计语言中提供了构造这种数据类型的程序设计语言中提供了构造这种数据类型的程序设计语言中提供了构造这种数据类型的程序设计语言中提供了构造这种数据类型的能力,称这种由一些属于不同数据类型的数据组合能力,称这种由一些属于不同数据类型的数据组合能力,称这种由一些属于不同数据类型的数据组合能力,称这种由一些属于不同数据类型的数据组合而成的构造数据类型为结构体类型。而成的构造数据类型为结构体类型。而成的构造数据类型为结构体类型。而成的构造数据类型为结构体类型。n
5、结构体类型的特点:结构体类型的特点:n结构体类型由假设干个数据项组成,其中的每一个数据项结构体类型由假设干个数据项组成,其中的每一个数据项称为一个结构体成员,它们都属于一种已经有定义数据类称为一个结构体成员,它们都属于一种已经有定义数据类型;型;n系统并没有预先定义结构体类型,凡要使用结构体类型数系统并没有预先定义结构体类型,凡要使用结构体类型数据那么需要在程序中进行定义。可以根据不同的需要在程据那么需要在程序中进行定义。可以根据不同的需要在程序中定义假设干个结构体类型;序中定义假设干个结构体类型;n一个特定的自定义结构体类型只在其定义存在的源程序中一个特定的自定义结构体类型只在其定义存在的源
6、程序中起作用,在其他源程序中那么不能使用;起作用,在其他源程序中那么不能使用;n要使用结构体类型数据,必须要先定义结构体类型,然后要使用结构体类型数据,必须要先定义结构体类型,然后再定义此种类型的变量;再定义此种类型的变量;结构体数据类型的根本概念结构体数据类型的根本概念 n n结构体类型的定义结构体类型的定义结构体类型的定义结构体类型的定义struct struct struct struct 标识符标识符标识符标识符 数据类型名数据类型名数据类型名数据类型名 结构体成员结构体成员结构体成员结构体成员1 1 1 1;数据类型名数据类型名数据类型名数据类型名 结构体成员结构体成员结构体成员结构
7、体成员i i i i;数据类型名数据类型名数据类型名数据类型名 结构体成员结构体成员结构体成员结构体成员n n n n;;式中:式中:式中:式中:struct struct struct struct 标识符标识符标识符标识符一起构成结构体数据类型的类型名;一起构成结构体数据类型的类型名;一起构成结构体数据类型的类型名;一起构成结构体数据类型的类型名;数据类型名数据类型名数据类型名数据类型名 结构体成员结构体成员结构体成员结构体成员i i i i;确定了结构体类型中的一个结构确定了结构体类型中的一个结构确定了结构体类型中的一个结构确定了结构体类型中的一个结构体成员,其定义形式如前面的变量定义;
8、体成员,其定义形式如前面的变量定义;体成员,其定义形式如前面的变量定义;体成员,其定义形式如前面的变量定义;uu一个结构体类型定义完成后这种数据类型就存在于一个结构体类型定义完成后这种数据类型就存在于一个结构体类型定义完成后这种数据类型就存在于一个结构体类型定义完成后这种数据类型就存在于C C C C源程源程源程源程序中,在同一个源程序中可以定义该种数据类型的变量。序中,在同一个源程序中可以定义该种数据类型的变量。序中,在同一个源程序中可以定义该种数据类型的变量。序中,在同一个源程序中可以定义该种数据类型的变量。struct student long id;char name20;int ag
9、e;char sex;char address80;long tel;结构体数据类型的根本概念结构体数据类型的根本概念 n n结构体类型的定义结构体类型的定义结构体类型的定义结构体类型的定义n n定义结构体类型变量的方法定义结构体类型变量的方法定义结构体类型变量的方法定义结构体类型变量的方法 n n先定义类型,然后定义变量。其形式为:先定义类型,然后定义变量。其形式为:先定义类型,然后定义变量。其形式为:先定义类型,然后定义变量。其形式为:struct struct struct struct 标识符标识符标识符标识符 变量列表变量列表变量列表变量列表n n定义结构体类型时同时定义结构体变量。
10、其形式为:定义结构体类型时同时定义结构体变量。其形式为:定义结构体类型时同时定义结构体变量。其形式为:定义结构体类型时同时定义结构体变量。其形式为:structstructstructstruct 标识符标识符标识符标识符 结构体成员列表;结构体成员列表;结构体成员列表;结构体成员列表;结构体变量列表;结构体变量列表;结构体变量列表;结构体变量列表;n n直接定义结构体变量。其一般形式为直接定义结构体变量。其一般形式为直接定义结构体变量。其一般形式为直接定义结构体变量。其一般形式为:struct struct struct struct 结构体成员列表;结构体成员列表;结构体成员列表;结构体成
11、员列表;结构体变量列表;结构体变量列表;结构体变量列表;结构体变量列表;结构体数据类型的根本概念结构体数据类型的根本概念 n n结构体类型的定义结构体类型的定义结构体类型的定义结构体类型的定义n n定义结构体类型变量举例定义结构体类型变量举例定义结构体类型变量举例定义结构体类型变量举例n n先定义类型,然后定义变量先定义类型,然后定义变量先定义类型,然后定义变量先定义类型,然后定义变量 n n同时定义结构体类型和变量同时定义结构体类型和变量同时定义结构体类型和变量同时定义结构体类型和变量 n n只定义结构体类型变量只定义结构体类型变量只定义结构体类型变量只定义结构体类型变量struct A l
12、ong number;char name20;int x;float y;struct A a1,a2;struct B long number;char name20;int x;float y;b1,b2;struct long number;char name20;int x;float y;c1,c2;结构体数据类型的根本概念结构体数据类型的根本概念 n n结构体类型的定义结构体类型的定义结构体类型的定义结构体类型的定义n n结构体类型的嵌套定义结构体类型的嵌套定义结构体类型的嵌套定义结构体类型的嵌套定义结构体类型可以嵌套定义,即定义的一个结构体类型的成结构体类型可以嵌套定义,即定义的
13、一个结构体类型的成结构体类型可以嵌套定义,即定义的一个结构体类型的成结构体类型可以嵌套定义,即定义的一个结构体类型的成员中可以有属于另外一个已经定义完成的结构体类型的变员中可以有属于另外一个已经定义完成的结构体类型的变员中可以有属于另外一个已经定义完成的结构体类型的变员中可以有属于另外一个已经定义完成的结构体类型的变量。量。量。量。struct datestruct date int year;int year;int month;int month;int day;int day;struct studentstruct student long number;long number;cha
14、r name20;char name20;struct date struct date birthday;birthday;int age;int age;char address80;char address80;long tel;long tel;结构体数据类型的根本概念结构体数据类型的根本概念 n n关键字关键字关键字关键字typedeftypedeftypedeftypedef的简单应用的简单应用的简单应用的简单应用n ntypedeftypedeftypedeftypedef关键字的主要作用关键字的主要作用关键字的主要作用关键字的主要作用n n为已经存在的数据类型取一个新的名字别名
15、;为已经存在的数据类型取一个新的名字别名;为已经存在的数据类型取一个新的名字别名;为已经存在的数据类型取一个新的名字别名;n n根据需要构造复杂的数据类型;根据需要构造复杂的数据类型;根据需要构造复杂的数据类型;根据需要构造复杂的数据类型;n n使用使用使用使用typedef typedef typedef typedef 为已经存在的数据类型取别名为已经存在的数据类型取别名为已经存在的数据类型取别名为已经存在的数据类型取别名n n使用使用使用使用typedeftypedeftypedeftypedef可以为已经存在的数据类型取别名,可以为已经存在的数据类型取别名,可以为已经存在的数据类型取别
16、名,可以为已经存在的数据类型取别名,定义别名后程序中既可以使用原类型名,也可以使定义别名后程序中既可以使用原类型名,也可以使定义别名后程序中既可以使用原类型名,也可以使定义别名后程序中既可以使用原类型名,也可以使用其别名。定义别名的一般形式为:用其别名。定义别名的一般形式为:用其别名。定义别名的一般形式为:用其别名。定义别名的一般形式为:n ntypedef typedef typedef typedef 数据类型名数据类型名数据类型名数据类型名 别名;别名;别名;别名;typedef int INTEGER;为系统整型int类型取别名INTEGERint j,k;等价于 INTEGER j,
17、k;typedef struct studenttypedef struct student long number;long number;struct date birthday;struct date birthday;char name20;char name20;int age;int age;char sex;char sex;char address80;char address80;long tel;long tel;STU;STU;struct student struct student 等价于等价于 STUSTUstruct studentstruct student l
18、ong number;long number;struct date birthday;struct date birthday;char name20;char name20;int age;int age;char sex;char sex;char address80;char address80;long tel;long tel;;typedef struct student STU;typedef struct student STU;struct student struct student 等价于等价于 STUSTU结构体数据类型的根本概念结构体数据类型的根本概念 n n关键字
19、关键字关键字关键字typedeftypedeftypedeftypedef的简单应用的简单应用的简单应用的简单应用n n使用使用使用使用typedeftypedeftypedeftypedef构造复杂数据类型构造复杂数据类型构造复杂数据类型构造复杂数据类型n n在不同的应用环境中对复杂结构数据的要求是不在不同的应用环境中对复杂结构数据的要求是不在不同的应用环境中对复杂结构数据的要求是不在不同的应用环境中对复杂结构数据的要求是不同的,所以使用同的,所以使用同的,所以使用同的,所以使用typedeftypedeftypedeftypedef关键字构造复杂结构数据没关键字构造复杂结构数据没关键字构造
20、复杂结构数据没关键字构造复杂结构数据没有统一的形式,在应用程序中应该根据需要构造适有统一的形式,在应用程序中应该根据需要构造适有统一的形式,在应用程序中应该根据需要构造适有统一的形式,在应用程序中应该根据需要构造适宜形式的数据类型。宜形式的数据类型。宜形式的数据类型。宜形式的数据类型。n n构造指定长度的字符串数据类型构造指定长度的字符串数据类型构造指定长度的字符串数据类型构造指定长度的字符串数据类型n n typedef char String100;typedef char String100;typedef char String100;typedef char String100;n
21、n StringStringStringString是字符串数据类型的类型名,其每个变量是字符串数据类型的类型名,其每个变量是字符串数据类型的类型名,其每个变量是字符串数据类型的类型名,其每个变量都可以容纳最多都可以容纳最多都可以容纳最多都可以容纳最多99999999个有效字符。个有效字符。个有效字符。个有效字符。n nString s1;String s1;String s1;String s1;等价于等价于等价于等价于 char s1100;char s1100;char s1100;char s1100;n n例例例例8-1 8-1 8-1 8-1 用用用用typedeftypedeft
22、ypedeftypedef构造指定长度的字符串数据类型。构造指定长度的字符串数据类型。构造指定长度的字符串数据类型。构造指定长度的字符串数据类型。结构体数据类型的根本概念结构体数据类型的根本概念 n n关键字关键字关键字关键字typedeftypedeftypedeftypedef的简单应用的简单应用的简单应用的简单应用n n使用使用使用使用typedeftypedeftypedeftypedef构造复杂数据类型构造复杂数据类型构造复杂数据类型构造复杂数据类型n n构造指定行列的二维数组类型构造指定行列的二维数组类型构造指定行列的二维数组类型构造指定行列的二维数组类型#define N 5#d
23、efine N 5#define N 5#define N 5#define M 10#define M 10#define M 10#define M 10typedef int arrN;typedef int arrN;typedef int arrN;typedef int arrN;typedef arr ArrayM;typedef arr ArrayM;typedef arr ArrayM;typedef arr ArrayM;ArrayArrayArrayArray是是是是M M M M行行行行N N N N列整型二维数组类型的类型名,其每个变列整型二维数组类型的类型名,其每个
24、变列整型二维数组类型的类型名,其每个变列整型二维数组类型的类型名,其每个变量都是一个量都是一个量都是一个量都是一个M M M M行行行行N N N N列的整型二维数组。列的整型二维数组。列的整型二维数组。列的整型二维数组。Array a1;Array a1;Array a1;Array a1;等价于等价于等价于等价于 int a1MNint a1MNint a1MNint a1MN;例例例例8-28-28-28-2 用用用用typedeftypedeftypedeftypedef构造指定行数和列数的二维数组类型构造指定行数和列数的二维数组类型构造指定行数和列数的二维数组类型构造指定行数和列数的
25、二维数组类型 。结构体数据类型的根本概念结构体数据类型的根本概念 n n关键字关键字关键字关键字typedeftypedeftypedeftypedef的简单应用的简单应用的简单应用的简单应用n n使用使用使用使用typedeftypedeftypedeftypedef构造复杂数据类型构造复杂数据类型构造复杂数据类型构造复杂数据类型n n构造指针数据类型构造指针数据类型构造指针数据类型构造指针数据类型typedef int*IP;typedef int*IP;typedef int*IP;typedef int*IP;IPIPIPIP是整型指针类型的类型名,其每个变量都是指向整是整型指针类型的
26、类型名,其每个变量都是指向整是整型指针类型的类型名,其每个变量都是指向整是整型指针类型的类型名,其每个变量都是指向整型数据的指针变量。型数据的指针变量。型数据的指针变量。型数据的指针变量。IP ptr;IP ptr;IP ptr;IP ptr;等价于等价于等价于等价于 int*ptr;int*ptr;int*ptr;int*ptr;例例例例8-38-38-38-3 用用用用typedeftypedeftypedeftypedef构造指针数据类型。构造指针数据类型。构造指针数据类型。构造指针数据类型。结构体数据类型的根本概念结构体数据类型的根本概念 n n关键字关键字关键字关键字typedeft
27、ypedeftypedeftypedef的简单应用的简单应用的简单应用的简单应用n n使用使用使用使用typedeftypedeftypedeftypedef构造复杂数据类型构造复杂数据类型构造复杂数据类型构造复杂数据类型n n构造指向函数的指针数据类型构造指向函数的指针数据类型构造指向函数的指针数据类型构造指向函数的指针数据类型typedef double(*FP)(double);typedef double(*FP)(double);typedef double(*FP)(double);typedef double(*FP)(double);F F F FP P P P是指向函数指针类
28、型的类型名,其每个变量都是一是指向函数指针类型的类型名,其每个变量都是一是指向函数指针类型的类型名,其每个变量都是一是指向函数指针类型的类型名,其每个变量都是一个指向拥有一个个指向拥有一个个指向拥有一个个指向拥有一个doubledoubledoubledouble类型形参、返回值类型为类型形参、返回值类型为类型形参、返回值类型为类型形参、返回值类型为doubledoubledoubledouble的函数的指针变量。的函数的指针变量。的函数的指针变量。的函数的指针变量。FP ptr;FP ptr;FP ptr;FP ptr;等价于等价于等价于等价于 double(*ptr)(double x);
29、double(*ptr)(double x);double(*ptr)(double x);double(*ptr)(double x);例例例例8-4 8-4 8-4 8-4 用用用用typedeftypedeftypedeftypedef构造指向函数的指针数据类型。构造指向函数的指针数据类型。构造指向函数的指针数据类型。构造指向函数的指针数据类型。结构体数据类型的根本概念结构体数据类型的根本概念 n n结构体变量的引用和输入输出结构体变量的引用和输入输出结构体变量的引用和输入输出结构体变量的引用和输入输出n n结构体变量的初始化结构体变量的初始化结构体变量的初始化结构体变量的初始化 n n
30、结构体变量初始化的形式类似于一维数组,其不结构体变量初始化的形式类似于一维数组,其不结构体变量初始化的形式类似于一维数组,其不结构体变量初始化的形式类似于一维数组,其不同之处在于结构体变量的成员值根据其所属类型可同之处在于结构体变量的成员值根据其所属类型可同之处在于结构体变量的成员值根据其所属类型可同之处在于结构体变量的成员值根据其所属类型可以是不同类型的数据。初始化的一般形式为:以是不同类型的数据。初始化的一般形式为:以是不同类型的数据。初始化的一般形式为:以是不同类型的数据。初始化的一般形式为:n n struct struct 标识符标识符标识符标识符 变量名变量名变量名变量名=结构体变
31、量成员值列结构体变量成员值列结构体变量成员值列结构体变量成员值列表表表表;n n n n 例:例:例:例:struct student stu1=5001,struct student stu1=5001,LiweiLiwei,n n 1988,12,30,19,1988,12,30,19,12 songlin12 songlin,65102621;,65102621;结构体数据类型的根本概念结构体数据类型的根本概念 n n结构体类型的定义和结构体变量的使用方法结构体类型的定义和结构体变量的使用方法结构体类型的定义和结构体变量的使用方法结构体类型的定义和结构体变量的使用方法n n结构体类型变量
32、的引用结构体类型变量的引用结构体类型变量的引用结构体类型变量的引用n n结构体变量一般也不能进行整体操作。只能通过结构体变量一般也不能进行整体操作。只能通过结构体变量一般也不能进行整体操作。只能通过结构体变量一般也不能进行整体操作。只能通过对其中的每一个数据项的操作到达操作结构体变量对其中的每一个数据项的操作到达操作结构体变量对其中的每一个数据项的操作到达操作结构体变量对其中的每一个数据项的操作到达操作结构体变量的目的。对于结构体变量中每一个数据项成员分的目的。对于结构体变量中每一个数据项成员分的目的。对于结构体变量中每一个数据项成员分的目的。对于结构体变量中每一个数据项成员分量的引用要使用点
33、运算符以组合成结构体成员分量的引用要使用点运算符以组合成结构体成员分量的引用要使用点运算符以组合成结构体成员分量的引用要使用点运算符以组合成结构体成员分量,其一般形式为:量,其一般形式为:量,其一般形式为:量,其一般形式为:n n 结构体变量名结构体变量名结构体变量名结构体变量名.成员分量名成员分量名成员分量名成员分量名 n n嵌套结构体类型变量的引用嵌套结构体类型变量的引用嵌套结构体类型变量的引用嵌套结构体类型变量的引用n n对于嵌套的结构体类型的变量,访问其成员时应对于嵌套的结构体类型的变量,访问其成员时应对于嵌套的结构体类型的变量,访问其成员时应对于嵌套的结构体类型的变量,访问其成员时应
34、采用逐级访问的方法,直到得到所需访问的成员为采用逐级访问的方法,直到得到所需访问的成员为采用逐级访问的方法,直到得到所需访问的成员为采用逐级访问的方法,直到得到所需访问的成员为止。其形式为:止。其形式为:止。其形式为:止。其形式为:n n 结构体变量名结构体变量名结构体变量名结构体变量名.一级成员分量名一级成员分量名一级成员分量名一级成员分量名.二级成二级成二级成二级成员分量名员分量名员分量名员分量名 特别提示:特别提示:结构体成员分量的数据类型与在其连接组合过结构体成员分量的数据类型与在其连接组合过程最后一个成员分量的数据类型一致。程最后一个成员分量的数据类型一致。例:设有结构体类型及变量定
35、义例:设有结构体类型及变量定义 struct A int x;float y;struct B struct A a;char c;struct B b;struct B b;则有:则有:b.a.xb.a.x 整型变量整型变量 b.a.yb.a.y 实型变量实型变量b.cb.c 字符型变量字符型变量结构体数据类型的根本概念结构体数据类型的根本概念 n n结构体类型的定义和结构体变量的使用方法结构体类型的定义和结构体变量的使用方法结构体类型的定义和结构体变量的使用方法结构体类型的定义和结构体变量的使用方法n n结构体类型变量的输入输出结构体类型变量的输入输出结构体类型变量的输入输出结构体类型变量
36、的输入输出n n不允许把结构体变量作为整体进行输入或输出的不允许把结构体变量作为整体进行输入或输出的不允许把结构体变量作为整体进行输入或输出的不允许把结构体变量作为整体进行输入或输出的操作,只能将结构体变量的成员作为输入输出的对操作,只能将结构体变量的成员作为输入输出的对操作,只能将结构体变量的成员作为输入输出的对操作,只能将结构体变量的成员作为输入输出的对象。象。象。象。n n同类型结构体变量的赋值同类型结构体变量的赋值同类型结构体变量的赋值同类型结构体变量的赋值n n当有两个同类型的结构体变量时,可以将一个结当有两个同类型的结构体变量时,可以将一个结当有两个同类型的结构体变量时,可以将一个
37、结当有两个同类型的结构体变量时,可以将一个结构体变量作为一个整体赋值给另外一个结构体变量。构体变量作为一个整体赋值给另外一个结构体变量。构体变量作为一个整体赋值给另外一个结构体变量。构体变量作为一个整体赋值给另外一个结构体变量。n n 例:例:例:例:struct student stu1=10001,struct student stu1=10001,LiweiLiwei,1980,1980,n n 12,30,19,12,30,19,12 songlin12 songlin,65102621;,65102621;n n struct student stu2=stu1;struct stu
38、dent stu2=stu1;例例8-5 8-5 结构体变量引用例如。结构体变量引用例如。结构体数据类型的根本概念结构体数据类型的根本概念 n n结构体变量作为函数参数结构体变量作为函数参数结构体变量作为函数参数结构体变量作为函数参数n n结构体类型变量可以作为函数结构体类型变量可以作为函数结构体类型变量可以作为函数结构体类型变量可以作为函数的参数在函数之间进行传递。的参数在函数之间进行传递。的参数在函数之间进行传递。的参数在函数之间进行传递。使用结构体类型变量作为函数使用结构体类型变量作为函数使用结构体类型变量作为函数使用结构体类型变量作为函数参数时,数据的传递仍然是参数时,数据的传递仍然是
39、参数时,数据的传递仍然是参数时,数据的传递仍然是“值传递方式;值传递方式;值传递方式;值传递方式;n n实现方式:函数调用时系统为实现方式:函数调用时系统为实现方式:函数调用时系统为实现方式:函数调用时系统为形参变量开辟一段内存单元形参变量开辟一段内存单元形参变量开辟一段内存单元形参变量开辟一段内存单元按照结构体变量所需要的存储按照结构体变量所需要的存储按照结构体变量所需要的存储按照结构体变量所需要的存储单元数以存放从实参传递过单元数以存放从实参传递过单元数以存放从实参传递过单元数以存放从实参传递过去的各结构体变量成员分量的去的各结构体变量成员分量的去的各结构体变量成员分量的去的各结构体变量成
40、员分量的值。值。值。值。n n例例例例8-6 8-6 结构体变量作为函数结构体变量作为函数结构体变量作为函数结构体变量作为函数参数使用例如。参数使用例如。参数使用例如。参数使用例如。struct TEST int x;char ch;实参实参 struct TEST a;struct TEST a;aa.xa.chbb.xb.ch形参形参 struct TEST b;struct TEST b;10aa10结构体数据类型的根本概念结构体数据类型的根本概念 n n结构体作函数的返回值类型结构体作函数的返回值类型结构体作函数的返回值类型结构体作函数的返回值类型n n返回结构体类型函数概念返回结构体
41、类型函数概念返回结构体类型函数概念返回结构体类型函数概念n n结构体类型数据对象不但能够作为函数参数在函结构体类型数据对象不但能够作为函数参数在函结构体类型数据对象不但能够作为函数参数在函结构体类型数据对象不但能够作为函数参数在函数之间传递,也可以作为函数的返回值。当函数的数之间传递,也可以作为函数的返回值。当函数的数之间传递,也可以作为函数的返回值。当函数的数之间传递,也可以作为函数的返回值。当函数的返回值类型是一个结构体类型时,该函数就称为返返回值类型是一个结构体类型时,该函数就称为返返回值类型是一个结构体类型时,该函数就称为返返回值类型是一个结构体类型时,该函数就称为返回结构体类型的函数
42、。回结构体类型的函数。回结构体类型的函数。回结构体类型的函数。n n函数定义的形式函数定义的形式函数定义的形式函数定义的形式 n nstruct struct 标识符标识符标识符标识符 函数名函数名函数名函数名(形式参数表及定义形式参数表及定义形式参数表及定义形式参数表及定义)n n 函数的定义和声明局部;函数的定义和声明局部;函数的定义和声明局部;函数的定义和声明局部;n n 函数的执行局部;函数的执行局部;函数的执行局部;函数的执行局部;n n 例例8-7 8-7 返回结构体类型函数的使用例如。返回结构体类型函数的使用例如。结构体类型和联合体类型结构体类型和联合体类型 n n结构体数据类型
43、的根本概念结构体数据类型的根本概念结构体数据类型的根本概念结构体数据类型的根本概念 n n结构体数组结构体数组结构体数组结构体数组 n n结构体数据类型与指针的关系结构体数据类型与指针的关系结构体数据类型与指针的关系结构体数据类型与指针的关系 n n联合体数据类型的根本概念联合体数据类型的根本概念联合体数据类型的根本概念联合体数据类型的根本概念 结构体数组结构体数组 n n结构体数组的定义和数组元素的引用结构体数组的定义和数组元素的引用结构体数组的定义和数组元素的引用结构体数组的定义和数组元素的引用n n结构体数组概念结构体数组概念结构体数组概念结构体数组概念n n一个结构体变量可以存放一组数
44、据以描述一个对一个结构体变量可以存放一组数据以描述一个对一个结构体变量可以存放一组数据以描述一个对一个结构体变量可以存放一组数据以描述一个对象的相关信息,如果存在假设干个同类型的对象那象的相关信息,如果存在假设干个同类型的对象那象的相关信息,如果存在假设干个同类型的对象那象的相关信息,如果存在假设干个同类型的对象那么需要使用多个具有相同结构的结构体变量。可以么需要使用多个具有相同结构的结构体变量。可以么需要使用多个具有相同结构的结构体变量。可以么需要使用多个具有相同结构的结构体变量。可以将这些相同类型的结构体变量组成结构体数组。结将这些相同类型的结构体变量组成结构体数组。结将这些相同类型的结构
45、体变量组成结构体数组。结将这些相同类型的结构体变量组成结构体数组。结构体数组中的每一个数组元素都是结构体变量,结构体数组中的每一个数组元素都是结构体变量,结构体数组中的每一个数组元素都是结构体变量,结构体数组中的每一个数组元素都是结构体变量,结构体数组特别适用于处理具有假设干相同关系的数构体数组特别适用于处理具有假设干相同关系的数构体数组特别适用于处理具有假设干相同关系的数构体数组特别适用于处理具有假设干相同关系的数据组成的集合体。据组成的集合体。据组成的集合体。据组成的集合体。n n结构体数组的定义结构体数组的定义结构体数组的定义结构体数组的定义n n定义结构体数组的方式与定义结构体变量相同
46、,定义结构体数组的方式与定义结构体变量相同,定义结构体数组的方式与定义结构体变量相同,定义结构体数组的方式与定义结构体变量相同,也有也有也有也有3 3三种方法。如果以定义好结构体类型,那么结三种方法。如果以定义好结构体类型,那么结三种方法。如果以定义好结构体类型,那么结三种方法。如果以定义好结构体类型,那么结构体数组定义的一般形式是:构体数组定义的一般形式是:构体数组定义的一般形式是:构体数组定义的一般形式是:n n struct struct 标识符标识符标识符标识符 数组名数组名数组名数组名 常量表达式常量表达式常量表达式常量表达式;结构体数组结构体数组 n n结构体数组的定义和数组元素的
47、引用结构体数组的定义和数组元素的引用结构体数组的定义和数组元素的引用结构体数组的定义和数组元素的引用n n结构体数组的存储形式结构体数组的存储形式结构体数组的存储形式结构体数组的存储形式n n构体数组各元素在系统内存中连续存放,每一数构体数组各元素在系统内存中连续存放,每一数构体数组各元素在系统内存中连续存放,每一数构体数组各元素在系统内存中连续存放,每一数组元素的成员分量也按类型定义中出现的顺序依次组元素的成员分量也按类型定义中出现的顺序依次组元素的成员分量也按类型定义中出现的顺序依次组元素的成员分量也按类型定义中出现的顺序依次存放。存放。存放。存放。n n结构体数组的初始化结构体数组的初始
48、化结构体数组的初始化结构体数组的初始化 n n由于结构体数组元素结构体变量一般总是由由于结构体数组元素结构体变量一般总是由由于结构体数组元素结构体变量一般总是由由于结构体数组元素结构体变量一般总是由假设干不同类型的数据组成的,而且结构体数组又假设干不同类型的数据组成的,而且结构体数组又假设干不同类型的数据组成的,而且结构体数组又假设干不同类型的数据组成的,而且结构体数组又由假设干个结构体变量组成,所以结构体数组的初由假设干个结构体变量组成,所以结构体数组的初由假设干个结构体变量组成,所以结构体数组的初由假设干个结构体变量组成,所以结构体数组的初始化形式总与较它高一维的普通变量数组的初始化始化形
49、式总与较它高一维的普通变量数组的初始化始化形式总与较它高一维的普通变量数组的初始化始化形式总与较它高一维的普通变量数组的初始化形式类似。初始化的一般形式是:形式类似。初始化的一般形式是:形式类似。初始化的一般形式是:形式类似。初始化的一般形式是:n n struct struct 标识符标识符标识符标识符 数组名数组名数组名数组名=初始化数据列表初始化数据列表初始化数据列表初始化数据列表;例:设有结构体类型定义例:设有结构体类型定义sturct personsturct person char name20;char name20;int count;int count;struct pers
50、on stu3=“Zhangstruct person stu3=“Zhang,0,0,WangWang,0,0,LiLi,0;,0;struct person stu3=“Zhangstruct person stu3=“Zhang,0,“Wang,0,“Wang,0,“Li,0,“Li,0;,0;结构体数组结构体数组 n n结构体数组的定义和数组元素的引用结构体数组的定义和数组元素的引用结构体数组的定义和数组元素的引用结构体数组的定义和数组元素的引用n n结构体数组元素的引用结构体数组元素的引用结构体数组元素的引用结构体数组元素的引用n n结构体数组元素就相当于一个结构体变量,所以结构体数