灵活数组成员(fleible array member)
来源:互联网 发布:网络暴力案例分析ppt 编辑:程序博客网 时间:2024/05/29 07:11
有时我们需要产生一个结构体,实现了一种可变长度的结构。如何来实现呢?
看这个结构体的定义:
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;
其实这个叫灵活数组成员(fleible array member)C89不支持这种东西,C99把它作为一种特例加入了标准。但是,C99所支持的是incomplete type,而不是zero array,形同int item[0];这种形式是非法的,C99支持的形式是形同int item[];只不过有些编译器把int item[0];作为非标准扩展来支持,而且在C99发布之前已经有了这种非标准扩展了,C99发布之后,有些编译器把两者合而为一。
- 灵活数组成员(fleible array member)
- fleible array member zero array membe
- c99之 柔性数组成员(flexible array member)
- 灵活数组成员
- 柔型数组成员(flexible array member)在redis中的一点使用
- 不完整类型(Incomplete Types)和柔性数组成员(Flexible Array Member)
- C99灵活数组-incompleted array
- struct hack和灵活的数组成员
- flexible array member
- 成员模板(member template)
- 灵活/弹性数组成员--结构体中0个元素的数组
- 参考,灵活数组成员,可变长结构体或者FAQ里下标为0的数组
- 灵活/弹性数组成员--结构体中0个元素的数组
- 灵活/弹性数组成员--结构体中0个元素的数组
- copy member from void * array
- 再看成员模板---member template
- 成员指针(pointer-to-member)
- 结构体内不定长数组初始化,error: #1077: an initializer cannot be specified for a flexible array member
- 叶问续集下载
- 善用GridView控件的HyperLinkField数据行
- My97---onpicked
- 从DataTable获取所有数据
- DSL Forum首席运营官Robin Mersh在中国的演讲
- 灵活数组成员(fleible array member)
- 基于COM接口的Shell扩展技术应用
- MS SQL Server中 CONVERT日期格式化
- CocoaX、Code、Objective-C语法快速参考
- cache protocol
- SOA与BPM的融合
- (转)在敏捷测试中如何设计用例
- sql cluster
- 在存储过程中排序分页