




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
_结构体与共用体小结一,结构体的概念和定义1,结构体的定义struct结构体名{数据类型成员名1;数据类型成员名1;...};这里数据类型可以是复合类型,例如又是一个结构体类型,即嵌套;精品文档放心下载2,结构体变量的定义struct结构体名变量名1,变量名2,,,变量名n;谢谢阅读或:struct结构体名_{数据类型成员名1;数据类型成员名1;...}结构体变量1,结构体变量2;或:struct{数据类型成员名1;数据类型成员名1;...}结构体变量1,结构体变量2;三种方式,第三种方式的话,每次要定义这个类型的结构体变量都要重复的写这精品文档放心下载一段代码;_其实定义了结构体后,struct结构体名就是一种新的类型,上述语句就像声明谢谢阅读变量一样;3,结构体变量的引用只能对结构体变量中的各个成员分别输出,不能对一个结构体变量作为一个整体精品文档放心下载输出;嵌套的结构体类型的引用:结构体变量名.结构体类型成员名.内嵌结构体的成员名;谢谢阅读4,结构体变量的初始化struct结构体名变量名={初始化数据};谢谢阅读或者在定义的时候就初始化:struct结构体名{数据类型成员名1;_数据类型成员名1;...}变量名={初始化数据};二,结构体数组1,结构体数组的定义举例structstu{intstu_nu;charname[20];floatscore;};structstustudent[5];或者:structstu_{intstu_nu;charname[20];floatscore;}student[5];或者:struct{intstu_nu;charname[20];floatscore;}student[5];跟定义结构体变量的三种形式是一样的,只不过这里每次定义的结构体变量是一感谢阅读个数组;每一个student[i]都是structstu类型的;感谢阅读_2,结构体数组的初始化和引用略;三,结构体与指针1,指向结构体的指针的定义,同上,也是三种形式;structemployeesemployee1,*p1;谢谢阅读或者:structemployees{...}employee1,*p1;或者:struct{..._}employee1,*p1;然后可进行如下操作:p1=&employee1;此时p1指向首地址;精品文档放心下载2,用结构体变量指针来引用结构体成员的两种操作:(*结构体变量的指针名).成员名;如:(*p1).name;括号不能省略,.的优先级是最高的;精品文档放心下载或:结构体变量的指针名->成员名;如:p1->name;注意.和->的优先级是最高的;;(*p1).name;p1->name;是等价的;_3,结构体数组与指针structstu{intstu_nu;charname[20];floatscore;}student[5],*p;此时可以(1)把数组student的起始地址赋给p:p=student;此时p指向student[0];谢谢阅读(2)也可把student的其他元素的地址赋给p感谢阅读p=&student[3];(3)利用指针移动如p++使p指向结构体数组的不同元素;精品文档放心下载四,结构体作为函数参数_1,结构体变量作为函数参数2,指向结构体变量的指针作为函数参数略,在后续文章里将给出一个例子;共用体的概念在C++语言中,不同数据类型的数据可以使用共同的存储区域,这种数据构造类型称为共用体,简称共用,又称联合体。共用体在定义、说明和使用形式上与结构体相似。两者本质上的不同仅在于使用内存的方式上。定义一个共用体类型的一般形式为:谢谢阅读union共用体名{成员表列;};例如:uniongyt{_inti;charc;floatf;};就定义了一个共用体类型uniongyt,它由三个成员组成,这三个成员在内存中使用共同的存储空间。由于共用体路各成员的数据长度往往不同,所以共用体变量在存储时总是按其成员中数据长度最大的成员占用内存空间。如:共用体类型uniongyt的变量占用4个字节的内存。感谢阅读在这一点上共用体与结构体不同,结构体类型变量在存储时总是扫各成员的数据长度之和占用内存空间。如,定义了一个结构体类型:精品文档放心下载structgyt{inti;charc;floatf;};则结构体类型structgyt的变量占用的内存为2+1+4个字节,也就是7个字节。感谢阅读_定义共用体变量的方法与定义结构体类型变量的方法相似,也有三种方法:谢谢阅读union共用体名{成员表列;}变量表列;如:uniongyt{inti;charc;floatf;}a,b,c;区分共用体类型定义与共用体变量定义uniongyt{_inti;charc;floatf;};uniongyta,b,c;直接定义共用体变量:union{inti;charc;floatf;}a,bc;与结构体类似,也可以定义共用体指针和共用体数组。union共用体名*共用指针名;union共用体名数组名[元素个数];_例如:uniongyt*pu;uniongytu1[3];//分别定义了共用体指针pu和共用体数组u1[3]。谢谢阅读共用体变量的使用形式由于共用体变量的各个成员使用共同的内存区域,所以共用体变量的内存空间在某个时刻只能保持某个成员的数据。由此可知,在程序中参加运算的必然是共用体变量的某个成员,而不能直接使用共用体变量。共用体变量成员的表现形式与结构体相同,它们也使用访问成员运算符"."和"->"表示。感谢阅读例如,前面定义了a,b,c为共用体类型变量,下面使用形式是正确的:谢谢阅读a.i引用共用体变量中的整型变量ia.c引用共用体变量中的字符变量ca,f引用共用体变量中的实型变量f不能只引用共用体类型变量,如:cout<<a是错误的,a的存储区域有好几种类型,分别谢谢阅读占用不同长度的存储区,仅写共用体类型变量名a难以使系统确定究竟输出的是哪一个成感谢阅读员的值。应该写成cout<<a.i或cout<<a.c等。精品文档放心下载在使用共用体类型变量的数据时要注意:在共用体类型变量中起作用的成员是最后一次存放感谢阅读的成员,在存入一个新的成员后原胡的成员就失去了作用,如:a.i=1;a,c='a';a.f=1.3;在完感谢阅读成了三个赋值运算以后,只有a.f是有效的,其他的忆被覆盖了。精品文档放心下载_共用体类型变量可以向另一个相同共用体类型的变量赋值。此外,共用类型变量可以作为参谢谢阅读数传递给函数,也可以使用地址传递方式把共用体类型变量的地址作为参数在函数间传递。谢谢阅读在程序中经常使用结构体与共用体相互嵌套的形式。即共用体类型的成员可是结构体类型,感谢阅读或结构体类型的成员是共用体类型。例如,下列结构何体类型datas的第三个成员是共用体类型:谢谢阅读structdatas{char*ps;inttype;union{floatfdata;intidata;charcdata;}udata;};_结构体与共用体的大小A.结构体与共用体一、结构体(struct)定义:结构体是由一系列具有相同数据类型或不同数据类型的数据构成的数据集合。谢谢阅读例子:structstudent{intnum;charname[20];};注意不要忽略最后的分号定义结构体类型变量的方法:strcutstudentstudent1,student2;精品文档放心下载大小:(1)空结构体的大小为1byte.(2)结构体的大小要是最严格,看下面详细介绍。如:structstudent感谢阅读{intnum;_charname;};占据的内存空间为8个byte。structstudent{intnum;charname;charmark;};大小也是8个Byte。按内存对齐方式说,应该是12个字节,所以这里有些不明白。精品文档放心下载注意:结构体变量可以有这样的赋值:A=B;二、共用体(union)1.定义:union维护足够的空间来放置多个数据成员中的“一种”,而不是为每一个数精品文档放心下载据成员配置空间,union中所有的数据成员公用一个空间,同一时间只能存储其中的一个数据成员,所有的成员具有相精品文档放心下载同的起始地址。举例:uniondata{_inti;charch;floatf;}大小为4个字节。引用方式:不能引用共用体的变量,只能引用变量中的成员。如a.i,a.ch.B.结构体的大小感谢阅读运算符sizeof可以计算出给定类型的大小,对于32位系统来说,感谢阅读sizeof(char)=1;sizeof(int)=4。谢谢阅读基本数据类型的大小很好计算,我们来看一下如何计算构造数据类型的大小。谢谢阅读C语言中的构造数据类型有三种:数组、结构体和共用体。谢谢阅读数组是相同类型的元素的集合,只要会计算单个元素的大小,整个数组所占空间等于基精品文档放心下载础元素大小乘上元素的个数。结构体中的成员可以是不同的数据类型,成员按照定义时的顺序依次存储在连续的内存谢谢阅读空间。和数组不一样的是,结构体的大小不是所有成员大小简单的相加,需要考虑到系统在精品文档放心下载存储结构体变量时的地址对齐问题。看下面这样的一个结构体:谢谢阅读structstu1{int i;charc;intj;_};类型对齐方式(变量存放的起始地址相对于结构的起始地址的偏移量)精品文档放心下载??Char 偏移量必须为sizeof(char)即1的倍数精品文档放心下载??Short 偏移量必须为sizeof(short)即2的倍数感谢阅读??int?? 偏移量必须为sizeof(int)即4的倍数感谢阅读??float??偏移量必须为sizeof(float)即4的倍数谢谢阅读??double?偏移量必须为sizeof(double)即8的倍数感谢阅读实际上,由于存储变量时地址对齐的要求,编译器在编译程序时会遵循两条原则:精品文档放心下载一、结构体变量中成员的偏移量必须是成员大小的整数倍(0被认为是任何数的整数倍)精品文档放心下载二、结构体大小必须是所有成员大小的整数倍。对照第一条,上面的例子中前两个成员的偏移量都满足要求,但第三个成员的偏移量为感谢阅读5,并不是自身(int)大小的整数倍。编译器在处理时会在第二个成员后面补上3个空字节,精品文档放心下载使得第三个成员的偏移量变成8。对照第二条,结构体大小等于最后一个成员的偏移量加上其大小,上面的例子中计算出感谢阅读来的大小为12,满足要求。再看一个满足第一条,不满足第二条的情况structstu2{int k;_shortt;};成员k的偏移量为0;成员t的偏移量为4,都不需要调整。但计算出来的大小为6,感谢阅读显然不是成员k大小的整数倍。因此,编译器会在成员t后面补上2个字节,使得结构体的谢谢阅读大小变成8从而满足第二个要求。由此可见,大家在定义结构体类型时需要考虑到字节对齐的情况,不同的顺序会影响到感谢阅读结构体的大小。对比下面两种定义顺序structstu3 structstu4{ {charc1; charc1;inti; charc2;charc2; int i;}}虽然结构体stu3和stu4中成员都一样,但sizeof(structstu3)的值为12而感谢阅读sizeof(structstu4)的值为8。如果结构体中的成员又是另外一种结构体类型时应该怎么计算呢?只需把其展开即可。感谢阅读但有一点需要注意,展开后的结构体的第一个成员的偏移量应当是被展开的结构体中最大的谢谢阅读成员的整数倍。看下面的例子,structtemp{shorti;+1_struct{charc;+5intj;+6}ss;+10+2intk;+4};=16结构体temp的成员ss.c的偏移量应该是4,而不是2。整个结构体大小应该是16。精品文档放心下载注意在linux下时,整个结构体的大小应该是:char对齐模数是1,short是2,int是4,float是4,double(linux是4
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年11月湖南岳麓山大科城创业服务有限公司招聘4人笔试参考题库附带答案详解
- 中医职业助理试题+答案
- 老年护理学练习题库(附答案)
- 2024四川波鸿实业有限公司招聘广元波鸿汽车销售服务有限公司客户经理岗位3人笔试参考题库附带答案详解
- 2025年湖南理工职业技术学院单招职业倾向性测试题库及答案1套
- 2025年湖北省黄石市单招职业适应性测试题库必考题
- 2025年湖南网络工程职业学院单招职业适应性测试题库参考答案
- 2025至2030年中国橡胶脚踏板数据监测研究报告
- 2025年贵州省遵义市单招职业适应性测试题库及答案1套
- 湖南省益阳市六校联考2023-2024学年高二上学期期末模拟地理试卷(解析版)
- 水工建筑物维护技术
- 载重汽车的安全操作规程范本
- 平台对接技术方案
- 化妆品包装相容性评估方法
- 安全生产法律法规、标准清单
- 消防车辆与泵装备的配置与选用与更新的技术要求与管理办法
- 学校重大事项议事决策制度
- 英纳能特种防护材料珠海产研生态基地建设项目(一期)环境影响报告表
- 建筑与市政施工现场安全卫生与职业健康通用规范培训课件
- 中小学音乐课堂体验活动设计
- 直流风扇QC工程图
评论
0/150
提交评论