博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于柔性数组的一些问题
阅读量:6971 次
发布时间:2019-06-27

本文共 882 字,大约阅读时间需要 2 分钟。

柔性数组结构成员
  结构中的最后一个元素同意是未知大小的数组,这就叫做柔性数组成员,但结构中的柔性数组成员前面必须至少一个其 他成员。柔性数组成员同意结构中包括一个大小可变的数组。sizeof返回的这样的结构大小不包括柔性数组的内存。

包括柔性数组成员的结构用malloc ()函数进行内存的动态分配,而且分配的内存应该大于结构的大小,以适应柔性数组的预期大小。

结构体变长的妙用——0个元素的数组
有时我们须要产生一个结构体。实现了一种可变长度的结构。

怎样来实现呢?

看这个结构体的定义:
typedef struct st_type
{


int nCnt;
int item[0];
}type_a;
(有些编译器会报错无法编译能够改成:)
typedef struct st_type
{

int nCnt;
int item[];
}type_a;
这样我们就能够定义一个可变长的结构。用sizeof(type_a)得到的仅仅有4,就是sizeof(nCnt)=sizeof(int)那个0个元素的数组没有占用空间,而后我们能够进行变长操作了。

C语言:
type_a *p = (type_a*)malloc(sizeof(type_a)+100*sizeof(int));
C++语言:
type_a *p = (type_a*)new char[sizeof(type_a)+100*sizeof(int)];
这样我们就产生了一个长为100的type_a类型的东西用p->item[n]就能简单地訪问可变长元素,原理十分简单

,分配了比sizeof(type_a)多的内存后int item[];就有了其意义了,它指向的是int nCnt;后面的内容,是没

有内存须要的,而在分配时多分配的内存就能够由其来操控,是个十分好用的技巧。


而释放相同简单:
C语言版:
free(p);
C++语言版:
delete []p;

最后引一篇“C语言结构体中的成员数组和指针”http://coolshell.cn/articles/11377.html

转载地址:http://dnasl.baihongyu.com/

你可能感兴趣的文章
大数据成神之路
查看>>
重新梳理下js中的深拷贝和浅拷贝
查看>>
个推Node.js 微服务实践:基于容器的一站式命令行工具链
查看>>
Taro 多端开发的正确姿势:打造三端统一的网易严选(小程序、H5、React Native)...
查看>>
105. Construct Binary Tree from Preorder and Inorder Traversal
查看>>
Data Lake Analytics: 以SQL方式查询Redis数据
查看>>
elasticsearch v6.5.4配置
查看>>
关于分块思想的个人理解
查看>>
手机端车牌号码键盘的vue组件
查看>>
iOS App卡顿监控(Freezing/Lag)
查看>>
云HBase发布全文索引服务,轻松应对复杂查询
查看>>
leetcode394. Decode String
查看>>
我们如何在Linkerd 2.2里设计重试
查看>>
Java程序员月薪达到三万,需要技术水平达到什么程度?
查看>>
cross-env使用
查看>>
web移动端与Hybird开发知识整理
查看>>
用最新的 Alamofire(swift 4.1) (带参数)post方法上传图片到服务器
查看>>
我设计一个phpms框架前的准备
查看>>
小程序--语音合成tts 对接多平台(讯飞,思必驰,百度)
查看>>
Node.js文件上传
查看>>