第7章 结构体和联合体数据类型
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
struct 结构体名 变量名={结构体变量成员值列表};
struct student s1={12, "LiMing",1992,12,30,20, 'm', "12 songlin",65102621};
struct student s1={12, "LiMing",{1992,12,30,20}, 'm', "12 songlin",65102621};
本名和别名在源程序中具有同样的作用。定义别名的一般形
式/*为先:定义/构*在造定数义据构类造型数,据然类后型再的取同别时名取*/别名*/
struct sttuytdyppeeenddteeffs数tru据ct类s型tu名den别t名;
{
{
////为此icsucccnthhhhtn系后rtyaaaauspsrrrr统,icgtetstnauni内deednandelexm[dtoa置icsuccd2;fntrthhhj;ne0,reiet数akaaanus[]ssg;2rrr;ibtc和sg据te0t[snaiuInr8N;e]Ida整ndtN;e0xhmTdoad];T型dE;rt;eEeeGaa([Gsyg2Ebs;Ee0Ri[inr8R;];tt;0h)j],dk; 类a;的y型;意取义别相名同IN。TEGER。
结构体和联合体数据类型
结构体类型的定义和使用 结构体数组 结构体数据类型与指针的关系 联合体数据类型
结构体数组
结构体数组的定义
定义结构体数组有3种方法,分别是:先定义结构体类型然 后定义结构体数组;在定义结构体类型的同时定义结构体数 组;只定义某种结构体类型的数组。在定义结构体数组的同 时还可以定义同类型的结构体变量。
定义结构体数据类型后,同一程序中也可以用该结构体数据 类型作为函数的返回值类型。函数的返回值类型是结构体类 型时,函数执行完成后返回的就是一个结构体数据,称这种 函数为返回结构体类型的函数。其函数定义的一般形式为:
struct 标识符 函数名(形式参数表及其定义) {
//函数体 }
Ex0706 已知某学生几门课程的成绩,利用返回结构体类型函数实现统 计总成绩功能。
//结构体分量引用示例 s1.name、s1.age、s1.sex s1.birthday.year、s1.birthday.month、s1.birthday.day
结构体类型的定义和使用
结构体变量的使用——输入输出
C程序中只能将结构体变量的成员分量作为输入输出的对 象。对结构体变量成员分量输入输出操作时应该特别注意 对应成员分量的数据类型。
Ex0701 用typedef构造指定长度的字符串数据类型。 Ex0702 用typedef构造指定行数和列数的二维数组类型。 Ex0703 用typedef构造指针数据类型。
结构体类型的定义和使用
结构体变量的使用——初始化
定义结构体类型变量的同时也可以进行初始化。结构体变量 初始化的形式类似于一维数组,不同之处在于结构体变量的 成员值依据其所属类型可以是不同类型的数据。结构体变量 初始化的一般形式为:
char name[20]; struct date birthday; unsigned age; char sex; char address[80]; char tel[20]; };
数据类型: struct date
结构体类型的定义和使用
typedef简单应用——数据类型的别名
使用typedef为已经存在的数据类型取别名后,数据类型的
结构体类型的定义和使用
结构体变量的使用——引用
通过操作结构体变量的每一个数据项达到操作结构体变量 的目的。对于结构体变量中每一个数据项(成员分量)的 引用要使用成员运算符(点运算符)以构成结构体成员分 量,结构体成员分量的一般形式为: 结构体变量名.成员分量名
对于嵌套的结构体类型变量,访问其成员时应采用逐级访 问的方法,直到获得所需访问的成员为止。其形式为: 结构体变量名.一级成员分量名.二级成员分量名…
Ex0704 结构体变量的输入/输出示例。
结构体类型的定义和使用
结构体变量的使用——做函数参数
结构体类型变量和结构体类型变量的成员都可以作为函数 的参数在函数间进行传递,数据的传递仍然是“值传递方 式”。
使用结构体类型变量作为函数参数时,被调函数的形参和 主调函数的实参都是结构体类型的变量,而且属于同一个 结构体类型。
s{ truincttssttuundoe;nt { cinhtasrtnuanmo;e[20];
cucccuccchhhhhhhnnaaaaaaassrrrrrrriiggnatsatsnneeeeddaeellxxmd[d[dd22;;rre00eeaa[]]ssgg2;;ssee0[[88;;];00]];; }stu35,stu46;
结构体类型指针变量定义形式为: struct 结构体类型名 *指针变量名;
//设已定义类型struct student,指针变量ptr定义如下 struct student *ptr;
结构体数据类型与指针的关系
结构体类型变量与指针的关系
使用取地址运算符将结构体变量的地址赋给指针变量。 //先定义指针变量,然后赋值 struct student student,*ptr; ptr=&student; //定义并初始化指针变量 struct student student,*ptr=&student;
结构体数组
结构体数组元素的使用
通过操作数组的每一个元素达到操作数组的目的。结构体 数组元素需要用下标变量的形式表示。
结构体数组元素就相当于一个结构体变量,将引用数组元 素的方法和引用结构体变量的方法结合起来就形成了引用 结构体数组元素成员分量的方法,其一般形式为: 数组名[下标].成员名
结构体类型的定义和使用
结构体类型定义
struct 结构体名 {
数据类型名 结构体成员1; 数据类型名 结构体成员2;
… 数据类型名 结构体成员i;
… 数据类型名 结构体成员n; };
来自百度文库
//结构体类型定义示例 struct student {
int stuno; char name[20]; unsigned age; char sex; char address[80]; char tel[20]; };
结构体类型的定义和使用
结构体类型嵌套定义
结构体类型的嵌套定义指的是在一个结构体数据类型中,某 些结构体成员的数据类型是另外一个在同一C程序中已经定 义完成的结构体数据类型。
struct date {
int year; int month; int day; };
struct student1 { int stuno;
struct person p1[30],p2[100];
结构体数组
结构体数组的初始化
结构体数组各元素首先以数组的形式在系统内存中连续存 放,其中的每一数组元素的成员分量则按类型定义中出现 的顺序依次存放。
//结结构构体体数数组组初初始始化化的示一例般形式是: typesdterfucstr标uc识t p符er数so组n 名[长度]={初始化数据列表}; { 结c构ha体r数na组m初e[始20化];形式与较它高一维的普通数组初始化形
结构体数组
结构体数组作函数的参数
在函数调用期间实参结构体数组将它的全部存储区域或者 部分存储区域提供给形参结构体数组共享。
如果需要把整个实参结构体数组传递给被调函数中的形参 结构体数组,可以使用实参结构体数组的名字或者实参结 构体数组第一个元素(0号元素)的地址。
如果需要把实参结构体数组中从某个元素值后的部分传递 给被调函数中的形参结构体数组,则使用实参结构体数组 某个元素的地址。
};
char tel[20];
typedef}sStTruUc; t student STU;
结构体类型的定义和使用
typedef简单应用——构造复杂数据类型
使用typedef还可以构造复杂结构的数据类型,由于不同的 应用环境对复杂结构数据的要求不同,所以使用typedef关 键字构造复杂结构数据没有统一的形式,在应用程序中应该 根据需要构造合适形式的数据类型。
Ex0708 统计并输出年龄在18岁以上的学生人数。
结构体和联合体数据类型
结构体类型的定义和使用 结构体数组 结构体数据类型与指针的关系 联合体数据类型
结构体数据类型与指针的关系
结构体类型变量与指针的关系
结构体类型变量的指针就是该结构体类型变量所占内存区 域的起始地址,同样也可以定义一个指针类型的变量来存 放这个地址,即指向这个结构体类型变量。
使用结构体类型变量的成员作为函数参数时,其中被调函 数中的形参是普通变量,而主调函数中的实参是结构体类 型变量中的一个成员,并且形参和实参的数据类型应该对 应一致。
Ex0705 利用结构体变量做函数参数,实现计算某学生3门课程平均成绩 的功能。
结构体类型的定义和使用
结构体变量的使用——做函数的返回值类型
//方法//一方示法例二示例 //方法三示例
strucsttpruecrtsopnerson struct
{{
{
char cnhaamr en[a2m0]e; [20]c;har name[20];
int coinutncto; unt; int count;
} }p1[30],p2[100}p];1[30],p2[100];
两sc个an同f(类"%型s,的%结d,%构u体"变,s1量.n可am以e直,&接s1进.s行tu赋no值,&操s作1.a。ge); pgpstruerittunssct((ftss(11"s%..tnnusaad,mm%eneedt)),;;%s1u=\n{1'm"2,s,"'1l,i.m"n1ai2nmgseo,"sn,11g9.sli8tnu8n",1,o62,5,s31100.a,22g62e2,)1; }; / /将结构体变量s1赋值给同类型结构体变量s2 struct student s2=s1;
程序使用结构体类型数据需要在源程序文件中进行定义。 结构体数据类型只在其定义存在的源程序中起作用,在其
他源程序中不能使用。 同一个源程序文件中可以定义若干个结构体类型。 结构体数据类型仍然是一类变量的抽象形式,系统不会为
数据类型分配存储空间。使用结构体类型数据,必须要定 义结构体数据类型的变量。
结构体和联合体数据类型
结构体类型的定义和使用 结构体数组 结构体数据类型与指针的关系 联合体数据类型
结构体类型的定义和使用
结构体数据类型的特点
结构体类型由若干个数据项组成,这些数据项都属于一种 已经有定义数据类型(基本数据类型或构造数据类型), 结构体类型中的数据项称为结构体成员。
结构体类型的定义和使用
结构体变量定义
方法一二三:先定直定义接义数定结据义构 类结体型构数的体据同类类时型型定变,义量然结后构定体义类该型数变据量类型 的变量。str其uc定t 义标形识式符与定义基本类型变量相同:
数{ 据结类构型体名成变员量列表表;; //在已经}结定构义体结变构量体列类表型;struct student的基础上定义结 构//定直体义接类结定型构义变体(量类仅stu型定1s义和tr)sutc结ut2s构tu体d变en量t的st同u5时和定st义u6变。量stu3和 stu4。struct student stu1,stu2;
式i类nt似co。u一nt维; 结构体数组的初始化就类似于普通二维数组 }P初ER始; 化,初始化中的注意事项也与二维普通数组初始化时 //相单同行或初类始似化。形式 PER per[3]={"Zhang",0, "Wang",0, "Li",0}; //分元素初始化形式 PER per[3]={{ "Zhang",0},{"Wang",0},{"Li",0}};
不能将结构体数组元素作为一个整体直接进行输入输出, 也需要通过输入输出数组元素的每一个成员分量达到输入 输出结构体数组元素的目的。
可以将结构体数组元素作为一个整体赋给同类型数组的另 外一个元素,或赋给一个同类型的结构体变量。
Ex0707 结构体数组操作(数组元素引用、数组元素的输入输出)示例。
struct student s1={12, "LiMing",1992,12,30,20, 'm', "12 songlin",65102621};
struct student s1={12, "LiMing",{1992,12,30,20}, 'm', "12 songlin",65102621};
本名和别名在源程序中具有同样的作用。定义别名的一般形
式/*为先:定义/构*在造定数义据构类造型数,据然类后型再的取同别时名取*/别名*/
struct sttuytdyppeeenddteeffs数tru据ct类s型tu名den别t名;
{
{
////为此icsucccnthhhhtn系后rtyaaaauspsrrrr统,icgtetstnauni内deednandelexm[dtoa置icsuccd2;fntrthhhj;ne0,reiet数akaaanus[]ssg;2rrr;ibtc和sg据te0t[snaiuInr8N;e]Ida整ndtN;e0xhmTdoad];T型dE;rt;eEeeGaa([Gsyg2Ebs;Ee0Ri[inr8R;];tt;0h)j],dk; 类a;的y型;意取义别相名同IN。TEGER。
结构体和联合体数据类型
结构体类型的定义和使用 结构体数组 结构体数据类型与指针的关系 联合体数据类型
结构体数组
结构体数组的定义
定义结构体数组有3种方法,分别是:先定义结构体类型然 后定义结构体数组;在定义结构体类型的同时定义结构体数 组;只定义某种结构体类型的数组。在定义结构体数组的同 时还可以定义同类型的结构体变量。
定义结构体数据类型后,同一程序中也可以用该结构体数据 类型作为函数的返回值类型。函数的返回值类型是结构体类 型时,函数执行完成后返回的就是一个结构体数据,称这种 函数为返回结构体类型的函数。其函数定义的一般形式为:
struct 标识符 函数名(形式参数表及其定义) {
//函数体 }
Ex0706 已知某学生几门课程的成绩,利用返回结构体类型函数实现统 计总成绩功能。
//结构体分量引用示例 s1.name、s1.age、s1.sex s1.birthday.year、s1.birthday.month、s1.birthday.day
结构体类型的定义和使用
结构体变量的使用——输入输出
C程序中只能将结构体变量的成员分量作为输入输出的对 象。对结构体变量成员分量输入输出操作时应该特别注意 对应成员分量的数据类型。
Ex0701 用typedef构造指定长度的字符串数据类型。 Ex0702 用typedef构造指定行数和列数的二维数组类型。 Ex0703 用typedef构造指针数据类型。
结构体类型的定义和使用
结构体变量的使用——初始化
定义结构体类型变量的同时也可以进行初始化。结构体变量 初始化的形式类似于一维数组,不同之处在于结构体变量的 成员值依据其所属类型可以是不同类型的数据。结构体变量 初始化的一般形式为:
char name[20]; struct date birthday; unsigned age; char sex; char address[80]; char tel[20]; };
数据类型: struct date
结构体类型的定义和使用
typedef简单应用——数据类型的别名
使用typedef为已经存在的数据类型取别名后,数据类型的
结构体类型的定义和使用
结构体变量的使用——引用
通过操作结构体变量的每一个数据项达到操作结构体变量 的目的。对于结构体变量中每一个数据项(成员分量)的 引用要使用成员运算符(点运算符)以构成结构体成员分 量,结构体成员分量的一般形式为: 结构体变量名.成员分量名
对于嵌套的结构体类型变量,访问其成员时应采用逐级访 问的方法,直到获得所需访问的成员为止。其形式为: 结构体变量名.一级成员分量名.二级成员分量名…
Ex0704 结构体变量的输入/输出示例。
结构体类型的定义和使用
结构体变量的使用——做函数参数
结构体类型变量和结构体类型变量的成员都可以作为函数 的参数在函数间进行传递,数据的传递仍然是“值传递方 式”。
使用结构体类型变量作为函数参数时,被调函数的形参和 主调函数的实参都是结构体类型的变量,而且属于同一个 结构体类型。
s{ truincttssttuundoe;nt { cinhtasrtnuanmo;e[20];
cucccuccchhhhhhhnnaaaaaaassrrrrrrriiggnatsatsnneeeeddaeellxxmd[d[dd22;;rre00eeaa[]]ssgg2;;ssee0[[88;;];00]];; }stu35,stu46;
结构体类型指针变量定义形式为: struct 结构体类型名 *指针变量名;
//设已定义类型struct student,指针变量ptr定义如下 struct student *ptr;
结构体数据类型与指针的关系
结构体类型变量与指针的关系
使用取地址运算符将结构体变量的地址赋给指针变量。 //先定义指针变量,然后赋值 struct student student,*ptr; ptr=&student; //定义并初始化指针变量 struct student student,*ptr=&student;
结构体数组
结构体数组元素的使用
通过操作数组的每一个元素达到操作数组的目的。结构体 数组元素需要用下标变量的形式表示。
结构体数组元素就相当于一个结构体变量,将引用数组元 素的方法和引用结构体变量的方法结合起来就形成了引用 结构体数组元素成员分量的方法,其一般形式为: 数组名[下标].成员名
结构体类型的定义和使用
结构体类型定义
struct 结构体名 {
数据类型名 结构体成员1; 数据类型名 结构体成员2;
… 数据类型名 结构体成员i;
… 数据类型名 结构体成员n; };
来自百度文库
//结构体类型定义示例 struct student {
int stuno; char name[20]; unsigned age; char sex; char address[80]; char tel[20]; };
结构体类型的定义和使用
结构体类型嵌套定义
结构体类型的嵌套定义指的是在一个结构体数据类型中,某 些结构体成员的数据类型是另外一个在同一C程序中已经定 义完成的结构体数据类型。
struct date {
int year; int month; int day; };
struct student1 { int stuno;
struct person p1[30],p2[100];
结构体数组
结构体数组的初始化
结构体数组各元素首先以数组的形式在系统内存中连续存 放,其中的每一数组元素的成员分量则按类型定义中出现 的顺序依次存放。
//结结构构体体数数组组初初始始化化的示一例般形式是: typesdterfucstr标uc识t p符er数so组n 名[长度]={初始化数据列表}; { 结c构ha体r数na组m初e[始20化];形式与较它高一维的普通数组初始化形
结构体数组
结构体数组作函数的参数
在函数调用期间实参结构体数组将它的全部存储区域或者 部分存储区域提供给形参结构体数组共享。
如果需要把整个实参结构体数组传递给被调函数中的形参 结构体数组,可以使用实参结构体数组的名字或者实参结 构体数组第一个元素(0号元素)的地址。
如果需要把实参结构体数组中从某个元素值后的部分传递 给被调函数中的形参结构体数组,则使用实参结构体数组 某个元素的地址。
};
char tel[20];
typedef}sStTruUc; t student STU;
结构体类型的定义和使用
typedef简单应用——构造复杂数据类型
使用typedef还可以构造复杂结构的数据类型,由于不同的 应用环境对复杂结构数据的要求不同,所以使用typedef关 键字构造复杂结构数据没有统一的形式,在应用程序中应该 根据需要构造合适形式的数据类型。
Ex0708 统计并输出年龄在18岁以上的学生人数。
结构体和联合体数据类型
结构体类型的定义和使用 结构体数组 结构体数据类型与指针的关系 联合体数据类型
结构体数据类型与指针的关系
结构体类型变量与指针的关系
结构体类型变量的指针就是该结构体类型变量所占内存区 域的起始地址,同样也可以定义一个指针类型的变量来存 放这个地址,即指向这个结构体类型变量。
使用结构体类型变量的成员作为函数参数时,其中被调函 数中的形参是普通变量,而主调函数中的实参是结构体类 型变量中的一个成员,并且形参和实参的数据类型应该对 应一致。
Ex0705 利用结构体变量做函数参数,实现计算某学生3门课程平均成绩 的功能。
结构体类型的定义和使用
结构体变量的使用——做函数的返回值类型
//方法//一方示法例二示例 //方法三示例
strucsttpruecrtsopnerson struct
{{
{
char cnhaamr en[a2m0]e; [20]c;har name[20];
int coinutncto; unt; int count;
} }p1[30],p2[100}p];1[30],p2[100];
两sc个an同f(类"%型s,的%结d,%构u体"变,s1量.n可am以e直,&接s1进.s行tu赋no值,&操s作1.a。ge); pgpstruerittunssct((ftss(11"s%..tnnusaad,mm%eneedt)),;;%s1u=\n{1'm"2,s,"'1l,i.m"n1ai2nmgseo,"sn,11g9.sli8tnu8n",1,o62,5,s31100.a,22g62e2,)1; }; / /将结构体变量s1赋值给同类型结构体变量s2 struct student s2=s1;
程序使用结构体类型数据需要在源程序文件中进行定义。 结构体数据类型只在其定义存在的源程序中起作用,在其
他源程序中不能使用。 同一个源程序文件中可以定义若干个结构体类型。 结构体数据类型仍然是一类变量的抽象形式,系统不会为
数据类型分配存储空间。使用结构体类型数据,必须要定 义结构体数据类型的变量。
结构体和联合体数据类型
结构体类型的定义和使用 结构体数组 结构体数据类型与指针的关系 联合体数据类型
结构体类型的定义和使用
结构体数据类型的特点
结构体类型由若干个数据项组成,这些数据项都属于一种 已经有定义数据类型(基本数据类型或构造数据类型), 结构体类型中的数据项称为结构体成员。
结构体类型的定义和使用
结构体变量定义
方法一二三:先定直定义接义数定结据义构 类结体型构数的体据同类类时型型定变,义量然结后构定体义类该型数变据量类型 的变量。str其uc定t 义标形识式符与定义基本类型变量相同:
数{ 据结类构型体名成变员量列表表;; //在已经}结定构义体结变构量体列类表型;struct student的基础上定义结 构//定直体义接类结定型构义变体(量类仅stu型定1s义和tr)sutc结ut2s构tu体d变en量t的st同u5时和定st义u6变。量stu3和 stu4。struct student stu1,stu2;
式i类nt似co。u一nt维; 结构体数组的初始化就类似于普通二维数组 }P初ER始; 化,初始化中的注意事项也与二维普通数组初始化时 //相单同行或初类始似化。形式 PER per[3]={"Zhang",0, "Wang",0, "Li",0}; //分元素初始化形式 PER per[3]={{ "Zhang",0},{"Wang",0},{"Li",0}};
不能将结构体数组元素作为一个整体直接进行输入输出, 也需要通过输入输出数组元素的每一个成员分量达到输入 输出结构体数组元素的目的。
可以将结构体数组元素作为一个整体赋给同类型数组的另 外一个元素,或赋给一个同类型的结构体变量。
Ex0707 结构体数组操作(数组元素引用、数组元素的输入输出)示例。