结构中的零长度数组.docVIP

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
结构中的零长度数组

结构中的零长度数组 Sunny.man 有时候我们会碰到下面这样的结构体,这其中有一个结构长度为零的数组。这个结构有什么作用呢?这样定义是否合法?是否占用存储空间呢?下面我们依次解决这些问题。 Struct Rep { Int size,capacity; Char str[0]; } 这个结构中str不占用存储空间,仅是一个符号。它在标准C中是不合法的,合法的定义应该是 Struct Rep { Int size,capacity; Char str[];//这样定义 } 这样进行定义也同样不占用存储空间,它也仅仅是一个符号。 下面的短文将解释这样用的好处和便利性。 如上图所示如果我们定义为 Stcuct Rep { Int size,capacity; Char *str; }; 我们在使用的时候,必须这样用 Rep *prep=new Rep; If(prep) { Char *tempbuf=new char[N]; If(tempbuf) { Prep-str=tempbuf;//需要初始化,并且附值。Buf的存储空间和结构体的存储空间也不是连续的,会出空内存碎片. } Else//如果buf分配不成功,需要删除结构体的空间。 { } } 通过上面的应用我们知道了最少两个原因使用这个特性:1.由于结构体和缓存不是一同分配在内存管理上复杂。2.需要初始化,那里面的内存指针。 如果我们使用了结构体内的零长度数组,我们在使用的时候,就可以这样使用. Rep *rep= reinterpret_castRep *(new int[4]); Rep- size=12; Rep-capacity=8; Memcpy(Rep-str,”Device”,6); Rep-str[6]=’\0’; 这样做的好处是不仅避免了小内存碎片(结构体)而且可以把给指针分配的内存紧邻在结构体的后面,并且指针不需要被初始化,自然就被附值了。其内存中的结构如下图所示.

文档评论(0)

xy88118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档