第10章结构体和联合体数据类型
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
结构体数据类型的基本概念
结构体数据类型的主要特点
结 构问体题类的型提由出一些属于不同数据类型的数据组合而成的构造 数据在类实型际,的其计主算要机特应点用为问:题中特别是在事务处理中,常常需 要结将构不体同类的型数由据若组干合个成数为据一项个组有成机,的其整中体每,一形个成数一据种项能称够为
既一表个示结出构各体个成数员据,又它表们示都出属这于些一数种据已之经间有关定系义的数构据造类数型据; 类系型统。并没有预先定义结构体类型,凡要使用结构体类型数 解据决则办需法要在程序中进行定义。可以根据不同的需要在程序
在中C定程义序若设干计个语结言构中体提类供型了;构造这种数据类型的能力,称 这一种个由特一定些的属自于定不义同结数构据体类型的只数在据其组定合义而存成在的构源造程数序据中
类起型作为用结,构在体其类他型源。程序中则不能使用; 要使用结构体类型数据,必须要先定义结构体类型,然后
再定义此种类型的变量;
返回结构体类型函数概念 结构体类型数据对象不但能够作为函数参数在函数之间传 递,也可以作为函数的返回值。当函数的返回值类型是一 个结构体类型时,该函数就称为返回结构体类型的函数。
函数定义的形式 struct 标识符 函数名(形式参数表及定义) { 函数的定义和声明部分; 函数的执行部分; }
例10-6 返回结构体类型函数的使用示例。
struct date { int year;
int month; int day; };
struct student { long number;
char name[20]; struct date birthday; int age; char address[80]; long tel; };
结构体数据类型的基本概念
关键字typedef的简单应用
typedef关键字的主要作ty用pedef struct student
typsetrdue为cf ti已nstt经IuNd存TeE在nGt的ER数;据类{型取lo一ng个n新um的b名e字r;(别名);
(int为{j使使名义系,ksciccln用用后别统;othhh根rt等naaa整tt程名u据agyyrrrc型价gpp序的nsat需nieeeed于and中一u;xdd要tmdam类;ee既般Irt构eNffe型eb可[可形sT为e造2取bsEr以0以式[i已别G复;r8]t为E;使为名0经h杂R]I已d用:;N存的ja,T经k原y在数E;;G存类的据scicclEnothhh在R型数rtn类aaa)u的ga名rrr据型cgnast数t,类eee;dad;xl据也md;型a;rt类e可ee取[s型2以bs别0[i取使r8]名t;0别h用]d;名其ay,别; 定名义。别定
结构体数组的定义 定义结构体数组的方式与定义结构体变量相同,也有3三 种方法。如果以定义好结构体类型,则结构体数组定义的 一般形式是: struct 标识符 数组名[常量表达式];
结构体数组
结构体数组的定义和数组元素的引用
结构体数组的存储形式 构体数组各元素在系统内存中连续存放,每一数组元素的 成员分量也按类型定义中出现的顺序依次存放。
例:struct student stu1={5001, ”Liwei”, 1988,12,30,19,”12 songlin”,65102621};
结构体数据类型的基本概念
结构体类型的定义和结构体变量的使用方法
结构体类型变量的引用 特结别构提体示变:量结一构般体也成不员能分进量行的整数体据操类作型。与只在能其通连过接对组其合中过的 程每最一后个一数个据成项员的分操量作的达数到据操类作型结一构致体。变量的目的。对于结 构例体:变设量有中结每构一体个类数型据及项变(量成定员义分量)的引用要使用点运 算符st以ru组ct合A 成结构体成员分量,其一般形式为: {结i构nt体x;变量名.成员st分ru量ct名B b;
结构体数据类型的基本概念
结构体类型和变量的定义
struct 标识符 { 数据类型名 结构体成员1;
数据类型名 结构体成员i; …
数据类型名 结构体成员n; };
struct student { long id;
char name[20]; int age; char sex; char address[80]; long tel; };
结构体数组的初始化 由例于:结设构有体结构数体组类元型素定(义 结构体变量)一般总是由若干不同 类s型tur的ct数pe据rs组on成的,而且结构体数组又由若干个结构体变 量{组c成ha,r n所am以e结[20构];体数组的初始化形式总与较它高一维的 普}通; in变t 量co数un组t; 的初始化形式类似。初始化的一般形式是: strsutcrtupcetr标so识n s符tu[3数]=组{“名Zh[a]n=g{”初,0,始”W化an数g据”,0列,”L表i”},0;};
struct person stu[3]={{“Zhang”,0},{“Wang”,0},{“Li”,0}};
结构体数组
结构体数组的定义和数组元素的引用
结构体数组元素的引用 结构体数组元素就相当于一个结构体变量,所以引用数组 元素成员分量的方法与前面介绍的引用结构体变量成员分 量的方法相同,其一般形式为: 数组名[下标].成员名
例10-3 用typedef构造指针数据类型。
结构体数据类型的基本概念
关键字typedef的简单应用
使用typedef构造复杂数据类型 构造指向函数的指针数据类型 typedef double (*FP)(double); FP是指向函数指针类型的类型名,其每个变量都是一 个指向拥有一个double类型形参、返回值类型为 double的函数的指针变量。 FP ptr; 等价于 double (*ptr)(double x);
结构体数据类型的基本概念
结构体类型的定义和结构体变量的使用方法
结构体类型变量的输入输出 不允许把结构体变量作为整体进行输入或输出的操作,只 能将结构体变量的成员作为输入输出的对象。
同类型结构体变量的赋值 当有两个同类型的结构体变量时,可以将一个结构体变量 作为一个整体赋值给另外一个结构体变量。 例:struct student stu1={10001,”Liwei”,1980, 12,30,19,”12 songlin”,65102621}; struct student stu2=stu1;
例10-1 用typedef构造指定长度的字符串数据类型。
结构体数据类型的基本概念
关键字typedef的简单应用
使用typedef构造复杂数据类型 构造指定行列的二维数组类型 #define N 5 #define M 10 typedef int arr[N]; typedef arr Array[M]; Array是M行N列整型二维数组类型的类型名,其每个 变量都是一个M行N列的整型二维数组。 Array a1; 等价于 int a1[M][N];
int x;
int x;
float y;
float y;
};
}b1,b2;
struct A a1,a2;
struct { long number;
char name[20]; int x; float y; }c1,c2;
结构体数据类型的基本概念
结构体类型和变量的定义
结构体类型的嵌套定义
结构体类型可以嵌套定义,即定义的一个结构体类型的成 员中可以有属于另外一个已经定义完成的结构体类型的变 量。
结构体数据类型的基本概念
结构体类型和变量的定义
定义结构体类型变量举例 先定义类型,然后定义变量 同时定义结构体类型和变量 只定义结构体类型变量
struct A
struct B
{ long number; { long number;
char name[20]; char name[20];
式中:struct 标识符一起构成结构体数据类型的类型名;
数据类型名 结构体成员i;确定了结构体类型中的一个结构体成 员,其定义形式如前面的变量定义;
一个结构体类型定义完成后这种数据类型就存在于C源 程序中,在同一个源程序中可以定义该种数据类型的变量。
结构体数据类型的基本概念
结构体类型和变量的定义
例10-2 用typedef构造指定行数和列数的二维数组类型 。
结构体数据类型的基本概念
关键字typedef的简单应用
使用typedef构造复杂数据类型 构造指针数据类型 typedef int *IP; IP是整型指针类型的类型名,其每个变量都是指向整 型数据的指针变量。
IP ptr; 等价于 int *ptr;
对结构体数组元素操作的惟一例外是可以将结构体数组元 素作为一个整体赋给同一结构体数组的另外一个元素,或 赋给一个同类型的结构体变量。
结构体数据类型的基本概念
结构体变量作为函数参数
struct TEST
结构体类型变量可以作为函数的
{ int x;
参数在函数之间进行传递。使用
char ch;
结构体类型变量作为函数参数时, };
数据的传递仍然是“值传递方
实参 struct TEST
嵌套结f构loa体t y类; 型变量的则引有用: 对访于问}s{t;嵌的rus套方cttr的法uBc结,t A构直a体到; 类得型到bbb的所...caa..变需xy 量访字实整,问符型型访的型变变问成变量量其员量成为员止时。应其采形用式逐为级: 结c构ha体r c变; 量名.一级成员分量名.二级成员分量名… };
long tteylp; edef 数据类}S型TU名; 别名;
};
struct student 等价于 STU
typedef struct student STU;
struct student 等价于 STU
结构体数据类型的基本概念
关键字typedef的简单应用
使用typedef构造复杂数据类型 在不同的应用环境中对复杂结构数据的要求是不同的,所 以使用typedef关键字构造复杂结构数据没有统一的形式, 在应用程序中应该根据需要构造合适形式的数据类型。 构造指定长度的字符串数据类型 typedef char String[100]; String是字符串数据类型的类型名,其每个变量都可 以容纳最多99个有效字符。 String s1; 等价于 char s1[100];
结构体和联合体数据类型
结构体数据类型的基本概念 结构体数组 结构体数据类型与指针的关系 联合体数据类型的基本概念
结构体数组
结构体数组的定义和数组元素的引用
结构体数组概念 一个结构体变量可以存放一组数据以描述一个对象的相关 信息,如果存在若干个同类型的对象则需要使用多个具有 相同结构的结构体变量。可以将这些相同类型的结构体变 量组成结构体数组。结构体数组中的每一个数组元素都是 结构体变量,结构体数组特别适用于处理具有若干相同关 系的数据组成的集合体。
例10-4 用typedef构造指向函数的指针数据类型。
结构体数据类型的基本概念
结构体变量的引用和输入输出
结构体变量的初始化 结构体变量初始化的形式类似于一维数组,其不同之处在 于结构体变量的成员值根据其所属类型可以是不同类型的 数据。初始化的一般形式为: struct 标识符 变量名={结构体变量成员值列表};
定义结构体类型变量的方法 先定义类型,然后定义变量。其形式为: struct 标识符 变量列表 定义结构体类型时同时定义结构体变量。其形式为: struct 标识符 { 结构体成员列表; }结构体变量列表; 直接定义结构体变量。其一般形式为: struct { 结构体成员列表; }结构体变量列表;
‘a’ a.ch
参变量开辟一段内存单元(按照
结构体变量所需要的存储单元数)
以存放从实参传递过去的各结构 b 10 b.x
体变量成员分量的值。
‘a’ b.ch
例10-5 结构体变量和结构体成员作为函数 参数使用示例。
形参 struct TEST b;
结构体数据类型的基本概念
结构体作函数的返回值类型
结构体数据类型的主要特点
结 构问体题类的型提由出一些属于不同数据类型的数据组合而成的构造 数据在类实型际,的其计主算要机特应点用为问:题中特别是在事务处理中,常常需 要结将构不体同类的型数由据若组干合个成数为据一项个组有成机,的其整中体每,一形个成数一据种项能称够为
既一表个示结出构各体个成数员据,又它表们示都出属这于些一数种据已之经间有关定系义的数构据造类数型据; 类系型统。并没有预先定义结构体类型,凡要使用结构体类型数 解据决则办需法要在程序中进行定义。可以根据不同的需要在程序
在中C定程义序若设干计个语结言构中体提类供型了;构造这种数据类型的能力,称 这一种个由特一定些的属自于定不义同结数构据体类型的只数在据其组定合义而存成在的构源造程数序据中
类起型作为用结,构在体其类他型源。程序中则不能使用; 要使用结构体类型数据,必须要先定义结构体类型,然后
再定义此种类型的变量;
返回结构体类型函数概念 结构体类型数据对象不但能够作为函数参数在函数之间传 递,也可以作为函数的返回值。当函数的返回值类型是一 个结构体类型时,该函数就称为返回结构体类型的函数。
函数定义的形式 struct 标识符 函数名(形式参数表及定义) { 函数的定义和声明部分; 函数的执行部分; }
例10-6 返回结构体类型函数的使用示例。
struct date { int year;
int month; int day; };
struct student { long number;
char name[20]; struct date birthday; int age; char address[80]; long tel; };
结构体数据类型的基本概念
关键字typedef的简单应用
typedef关键字的主要作ty用pedef struct student
typsetrdue为cf ti已nstt经IuNd存TeE在nGt的ER数;据类{型取lo一ng个n新um的b名e字r;(别名);
(int为{j使使名义系,ksciccln用用后别统;othhh根rt等naaa整tt程名u据agyyrrrc型价gpp序的nsat需nieeeed于and中一u;xdd要tmdam类;ee既般Irt构eNffe型eb可[可形sT为e造2取bsEr以0以式[i已别G复;r8]t为E;使为名0经h杂R]I已d用:;N存的ja,T经k原y在数E;;G存类的据scicclEnothhh在R型数rtn类aaa)u的ga名rrr据型cgnast数t,类eee;dad;xl据也md;型a;rt类e可ee取[s型2以bs别0[i取使r8]名t;0别h用]d;名其ay,别; 定名义。别定
结构体数组的定义 定义结构体数组的方式与定义结构体变量相同,也有3三 种方法。如果以定义好结构体类型,则结构体数组定义的 一般形式是: struct 标识符 数组名[常量表达式];
结构体数组
结构体数组的定义和数组元素的引用
结构体数组的存储形式 构体数组各元素在系统内存中连续存放,每一数组元素的 成员分量也按类型定义中出现的顺序依次存放。
例:struct student stu1={5001, ”Liwei”, 1988,12,30,19,”12 songlin”,65102621};
结构体数据类型的基本概念
结构体类型的定义和结构体变量的使用方法
结构体类型变量的引用 特结别构提体示变:量结一构般体也成不员能分进量行的整数体据操类作型。与只在能其通连过接对组其合中过的 程每最一后个一数个据成项员的分操量作的达数到据操类作型结一构致体。变量的目的。对于结 构例体:变设量有中结每构一体个类数型据及项变(量成定员义分量)的引用要使用点运 算符st以ru组ct合A 成结构体成员分量,其一般形式为: {结i构nt体x;变量名.成员st分ru量ct名B b;
结构体数据类型的基本概念
结构体类型和变量的定义
struct 标识符 { 数据类型名 结构体成员1;
数据类型名 结构体成员i; …
数据类型名 结构体成员n; };
struct student { long id;
char name[20]; int age; char sex; char address[80]; long tel; };
结构体数组的初始化 由例于:结设构有体结构数体组类元型素定(义 结构体变量)一般总是由若干不同 类s型tur的ct数pe据rs组on成的,而且结构体数组又由若干个结构体变 量{组c成ha,r n所am以e结[20构];体数组的初始化形式总与较它高一维的 普}通; in变t 量co数un组t; 的初始化形式类似。初始化的一般形式是: strsutcrtupcetr标so识n s符tu[3数]=组{“名Zh[a]n=g{”初,0,始”W化an数g据”,0列,”L表i”},0;};
struct person stu[3]={{“Zhang”,0},{“Wang”,0},{“Li”,0}};
结构体数组
结构体数组的定义和数组元素的引用
结构体数组元素的引用 结构体数组元素就相当于一个结构体变量,所以引用数组 元素成员分量的方法与前面介绍的引用结构体变量成员分 量的方法相同,其一般形式为: 数组名[下标].成员名
例10-3 用typedef构造指针数据类型。
结构体数据类型的基本概念
关键字typedef的简单应用
使用typedef构造复杂数据类型 构造指向函数的指针数据类型 typedef double (*FP)(double); FP是指向函数指针类型的类型名,其每个变量都是一 个指向拥有一个double类型形参、返回值类型为 double的函数的指针变量。 FP ptr; 等价于 double (*ptr)(double x);
结构体数据类型的基本概念
结构体类型的定义和结构体变量的使用方法
结构体类型变量的输入输出 不允许把结构体变量作为整体进行输入或输出的操作,只 能将结构体变量的成员作为输入输出的对象。
同类型结构体变量的赋值 当有两个同类型的结构体变量时,可以将一个结构体变量 作为一个整体赋值给另外一个结构体变量。 例:struct student stu1={10001,”Liwei”,1980, 12,30,19,”12 songlin”,65102621}; struct student stu2=stu1;
例10-1 用typedef构造指定长度的字符串数据类型。
结构体数据类型的基本概念
关键字typedef的简单应用
使用typedef构造复杂数据类型 构造指定行列的二维数组类型 #define N 5 #define M 10 typedef int arr[N]; typedef arr Array[M]; Array是M行N列整型二维数组类型的类型名,其每个 变量都是一个M行N列的整型二维数组。 Array a1; 等价于 int a1[M][N];
int x;
int x;
float y;
float y;
};
}b1,b2;
struct A a1,a2;
struct { long number;
char name[20]; int x; float y; }c1,c2;
结构体数据类型的基本概念
结构体类型和变量的定义
结构体类型的嵌套定义
结构体类型可以嵌套定义,即定义的一个结构体类型的成 员中可以有属于另外一个已经定义完成的结构体类型的变 量。
结构体数据类型的基本概念
结构体类型和变量的定义
定义结构体类型变量举例 先定义类型,然后定义变量 同时定义结构体类型和变量 只定义结构体类型变量
struct A
struct B
{ long number; { long number;
char name[20]; char name[20];
式中:struct 标识符一起构成结构体数据类型的类型名;
数据类型名 结构体成员i;确定了结构体类型中的一个结构体成 员,其定义形式如前面的变量定义;
一个结构体类型定义完成后这种数据类型就存在于C源 程序中,在同一个源程序中可以定义该种数据类型的变量。
结构体数据类型的基本概念
结构体类型和变量的定义
例10-2 用typedef构造指定行数和列数的二维数组类型 。
结构体数据类型的基本概念
关键字typedef的简单应用
使用typedef构造复杂数据类型 构造指针数据类型 typedef int *IP; IP是整型指针类型的类型名,其每个变量都是指向整 型数据的指针变量。
IP ptr; 等价于 int *ptr;
对结构体数组元素操作的惟一例外是可以将结构体数组元 素作为一个整体赋给同一结构体数组的另外一个元素,或 赋给一个同类型的结构体变量。
结构体数据类型的基本概念
结构体变量作为函数参数
struct TEST
结构体类型变量可以作为函数的
{ int x;
参数在函数之间进行传递。使用
char ch;
结构体类型变量作为函数参数时, };
数据的传递仍然是“值传递方
实参 struct TEST
嵌套结f构loa体t y类; 型变量的则引有用: 对访于问}s{t;嵌的rus套方cttr的法uBc结,t A构直a体到; 类得型到bbb的所...caa..变需xy 量访字实整,问符型型访的型变变问成变量量其员量成为员止时。应其采形用式逐为级: 结c构ha体r c变; 量名.一级成员分量名.二级成员分量名… };
long tteylp; edef 数据类}S型TU名; 别名;
};
struct student 等价于 STU
typedef struct student STU;
struct student 等价于 STU
结构体数据类型的基本概念
关键字typedef的简单应用
使用typedef构造复杂数据类型 在不同的应用环境中对复杂结构数据的要求是不同的,所 以使用typedef关键字构造复杂结构数据没有统一的形式, 在应用程序中应该根据需要构造合适形式的数据类型。 构造指定长度的字符串数据类型 typedef char String[100]; String是字符串数据类型的类型名,其每个变量都可 以容纳最多99个有效字符。 String s1; 等价于 char s1[100];
结构体和联合体数据类型
结构体数据类型的基本概念 结构体数组 结构体数据类型与指针的关系 联合体数据类型的基本概念
结构体数组
结构体数组的定义和数组元素的引用
结构体数组概念 一个结构体变量可以存放一组数据以描述一个对象的相关 信息,如果存在若干个同类型的对象则需要使用多个具有 相同结构的结构体变量。可以将这些相同类型的结构体变 量组成结构体数组。结构体数组中的每一个数组元素都是 结构体变量,结构体数组特别适用于处理具有若干相同关 系的数据组成的集合体。
例10-4 用typedef构造指向函数的指针数据类型。
结构体数据类型的基本概念
结构体变量的引用和输入输出
结构体变量的初始化 结构体变量初始化的形式类似于一维数组,其不同之处在 于结构体变量的成员值根据其所属类型可以是不同类型的 数据。初始化的一般形式为: struct 标识符 变量名={结构体变量成员值列表};
定义结构体类型变量的方法 先定义类型,然后定义变量。其形式为: struct 标识符 变量列表 定义结构体类型时同时定义结构体变量。其形式为: struct 标识符 { 结构体成员列表; }结构体变量列表; 直接定义结构体变量。其一般形式为: struct { 结构体成员列表; }结构体变量列表;
‘a’ a.ch
参变量开辟一段内存单元(按照
结构体变量所需要的存储单元数)
以存放从实参传递过去的各结构 b 10 b.x
体变量成员分量的值。
‘a’ b.ch
例10-5 结构体变量和结构体成员作为函数 参数使用示例。
形参 struct TEST b;
结构体数据类型的基本概念
结构体作函数的返回值类型