ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:19.03KB ,
资源ID:18152855      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/18152855.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(结构体与共用体小结Word格式.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

结构体与共用体小结Word格式.docx

1、变量名 = 初始化数据;二,结构体数组1,结构体数组的定义举例struct stuint stu_nu;char name20;float score;struct stu student5;或者:student5;跟定义结构体变量的三种形式是一样的,只不过这里每次定义的结构体变量是一个数组;每一个studenti都是struct stu类型的;2,结构体数组的初始化和引用略;三,结构体与指针1,指向结构体的指针的定义,同上,也是三种形式;struct employees employee1,*p1;struct employeesemployee1,*p1;然后可进行如下操作:p1 = &e

2、mployee1;此时p1指向首地址;2,用结构体变量指针来引用结构体成员的两种操作:(*结构体变量的指针名).成员名;如:(*p1).name;括号不能省略,.的优先级是最高的;结构体变量的指针名-成员名;p1-name;注意.和-的优先级是最高的;employee1.name;是等价的;3,结构体数组与指针student5,*p;此时可以(1)把数组student的起始地址赋给p:p = student;此时p指向student0;(2)也可把student的其他元素的地址赋给pp = &student3;(3)利用指针移动如p+使p指向结构体数组的不同元素;四,结构体作为函数参数1,结构

3、体变量作为函数参数2,指向结构体变量的指针作为函数参数略,在后续文章里将给出一个例子;共用体的概念在C+语言中,不同数据类型的数据可以使用共同的存储区域,这种数据构造类型称为共用体,简称共用,又称联合体。共用体在定义、说明和使用形式上与结构体相似。两者本质上的不同仅在于使用存的方式上。定义一个共用体类型的一般形式为:union 共用体名成员表列;例如:union gytint i;char c;float f;就定义了一个共用体类型union gyt,它由三个成员组成,这三个成员在存中使用共同的存储空间。由于共用体路各成员的数据长度往往不同,所以共用体变量在存储时总是按其成员中数据长度最大的成

4、员占用存空间。共用体类型union gyt的变量占用4个字节的存。在这一点上共用体与结构体不同,结构体类型变量在存储时总是扫各成员的数据长度之和占用存空间。如,定义了一个结构体类型:struct gyt则结构体类型struct gyt的变量占用的存为2+1+4个字节,也就是7个字节。定义共用体变量的方法与定义结构体类型变量的方法相似,也有三种方法:变量表列;a,b,c;区分共用体类型定义与共用体变量定义union gyt a,b,c;直接定义共用体变量:uniona,bc;与结构体类似,也可以定义共用体指针和共用体数组。union 共用体名 *共用指针名;union 共用体名 数组名元素个数;

5、union gyt *pu;union gyt u13; /分别定义了共用体指针pu和共用体数组u13。共用体变量的使用形式由于共用体变量的各个成员使用共同的存区域,所以共用体变量的存空间在某个时刻只能保持某个成员的数据。由此可知,在程序中参加运算的必然是共用体变量的某个成员,而不能直接使用共用体变量。共用体变量成员的表现形式与结构体相同,它们也使用访问成员运算符.和-表示。例如,前面定义了a,b,c为共用体类型变量,下面使用形式是正确的:a.i 引用共用体变量中的整型变量ia.c 引用共用体变量中的字符变量ca,f 引用共用体变量中的实型变量f不能只引用共用体类型变量,如:couta是错误的

6、,a的存储区域有好几种类型,分别占用不同长度的存储区,仅写共用体类型变量名a难以使系统确定究竟输出的是哪一个成员的值。应该写成couta.i或couta.c等。在使用共用体类型变量的数据时要注意:在共用体类型变量中起作用的成员是最后一次存放的成员,在存入一个新的成员后原胡的成员就失去了作用,如:a.i=1;a,c=a;a.f=1.3;在完成了三个赋值运算以后,只有a.f是有效的,其他的忆被覆盖了。共用体类型变量可以向另一个相同共用体类型的变量赋值。此外,共用类型变量可以作为参数传递给函数,也可以使用地址传递方式把共用体类型变量的地址作为参数在函数间传递。在程序中经常使用结构体与共用体相互嵌套的

7、形式。即共用体类型的成员可是结构体类型,或结构体类型的成员是共用体类型。例如,下列结构何体类型datas的第三个成员是共用体类型:struct dataschar *ps;int type;float fdata;int idata;char cdata;udata;结构体与共用体的大小A.结构体与共用体一、结构体(struct)1. 定义:结构体是由一系列具有相同数据类型或不同数据类型的数据构成的数据集合。2.例子:struct studentint num;注意不要忽略最后的分号3.定义结构体类型变量的方法:strcut student student1, student2;4.大小:(1

8、) 空结构体的大小为1byte.(2)结构体的大小要是最严格,看下面详细介绍。int num;char name;占据的存空间为8个byte。char mark;大小也是8个Byte。按存对齐方式说,应该是12个字节,所以这里有些不明白。 注意:结构体变量可以有这样的赋值:A=B;二、共用体(union)1.定义:union维护足够的空间来放置多个数据成员中的“一种”,而不是为每一个数据成员配置空间,在union中所有的数据成员公用一个空间,同一时间只能存储其中的一个数据成员,所有的成员具有相同的起始地址。举例:union datachar ch;大小为4个字节。2. 引用方式:不能引用共用体

9、的变量,只能引用变量中的成员。如a.i, a.ch.B.结构体的大小运算符sizeof可以计算出给定类型的大小,对于32位系统来说,sizeof(char) = 1; sizeof(int) = 4。基本数据类型的大小很好计算,我们来看一下如何计算构造数据类型的大小。C语言中的构造数据类型有三种:数组、结构体和共用体。数组是相同类型的元素的集合,只要会计算单个元素的大小,整个数组所占空间等于基础元素大小乘上元素的个数。结构体中的成员可以是不同的数据类型,成员按照定义时的顺序依次存储在连续的存空间。和数组不一样的是,结构体的大小不是所有成员大小简单的相加,需要考虑到系统在存储结构体变量时的地址对

10、齐问题。看下面这样的一个结构体:struct stu1i;charc;j;类型 对齐方式(变量存放的起始地址相对于结构的起始地址的偏移量)?Char 偏移量必须为sizeof(char)即1的倍数Short偏移量必须为sizeof(short)即2的倍数int ? 偏移量必须为sizeof(int)即4的倍数float ?偏移量必须为sizeof(float)即4的倍数double ?偏移量必须为sizeof(double)即8的倍数 实际上,由于存储变量时地址对齐的要求,编译器在编译程序时会遵循两条原则:一、结构体变量中成员的偏移量必须是成员大小的整数倍(0被认为是任何数的整数倍)二、结构体

11、大小必须是所有成员大小的整数倍。对照第一条,上面的例子中前两个成员的偏移量都满足要求,但第三个成员的偏移量为5,并不是自身(int)大小的整数倍。编译器在处理时会在第二个成员后面补上3个空字节,使得第三个成员的偏移量变成8。对照第二条,结构体大小等于最后一个成员的偏移量加上其大小,上面的例子中计算出来的大小为12,满足要求。再看一个满足第一条,不满足第二条的情况struct stu2k;shortt;成员k的偏移量为0;成员t的偏移量为4,都不需要调整。但计算出来的大小为6,显然不是成员k大小的整数倍。因此,编译器会在成员t后面补上2个字节,使得结构体的大小变成8从而满足第二个要求。由此可见,

12、大家在定义结构体类型时需要考虑到字节对齐的情况,不同的顺序会影响到结构体的大小。对比下面两种定义顺序structstu3struct stu4c1;c2;虽然结构体stu3和stu4中成员都一样,但sizeof(struct stu3)的值为12而sizeof(struct stu4)的值为8。如果结构体中的成员又是另外一种结构体类型时应该怎么计算呢?只需把其展开即可。但有一点需要注意,展开后的结构体的第一个成员的偏移量应当是被展开的结构体中最大的成员的整数倍。看下面的例子,struct temp+1+5int j;+6 ss;+10+2int k;+4=16结构体temp的成员ss.c的偏移

13、量应该是4,而不是2。整个结构体大小应该是16。注意在linux下时,整个结构体的大小应该是:char对齐模数是1,short是2,int是4,float是4,double(linux是4,windows是8)所以对于如下的结构体:(32位机,默认设置)tempdouble对于在WINDOWNS系统下,整个结构的大小应该是16,在LINUX系统下,整个结构的大小应该是12当控制结构的成员封装到存并为模块中的所有结构指定相同的封装时。#pragma pack(n)是把所有的成员的对齐模数都设置为n,比如设置为1后,就是一个一个的挨着存放,结构大小也就是成员大小之和了。n必须小于默认的对齐模数,也就是说只能向小设,不能向大设

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1