参考,灵活数组成员,可变长结构体或者FAQ里下标为0的数组
2007-12-08 18:13
239 查看
不知道以下是否正确
在不少结构中看到这样的定义:
struct test{
int num;
char ch;
char data[0];
};
不知道这个data[0]的作用是什么?申请连续空间吗?
这是为了扩展结构体的长度
方便扩充长度
是可变长结构体的一种定义形式
其中楼主的这种声明,data是不占内存空间的!
data[0]定义了一个有0个元素的char型数组,可看成是data[](可变长的数组),是结构体中用到的一种叫可变长数组的小技巧。
例:
C/C++ code
在不少结构中看到这样的定义:
struct test{
int num;
char ch;
char data[0];
};
不知道这个data[0]的作用是什么?申请连续空间吗?
这是为了扩展结构体的长度
方便扩充长度
是可变长结构体的一种定义形式
其中楼主的这种声明,data是不占内存空间的!
data[0]定义了一个有0个元素的char型数组,可看成是data[](可变长的数组),是结构体中用到的一种叫可变长数组的小技巧。
例:
C/C++ code
struct test{ int num; char ch; char data[0]; }; int main() { test *array=(test*)malloc(sizeof(test)+100*sizeof(char));//分配了100个数组内存单元 array->data[0]='a'; //由此可这样结构体操作数组 array->data[99]='b'; return 0; }
相关文章推荐
- 灵活/弹性数组成员--结构体中0个元素的数组
- 灵活/弹性数组成员--结构体中0个元素的数组
- 灵活/弹性数组成员--结构体中0个元素的数组
- 结构体中的柔性数组成员(数组长度为0成员)!
- 利用runtime,避免UIButton 重复点击, 可变数组和可变字典为nil,或者数组越界导致的崩溃
- JS删除数组指定对象或者指定下标js删除数组重复值
- C语言结构体里的成员数组和指针
- 结构体中最后一个成员为[0]或[1]长度数组(柔性数组成员)的用法
- perl练习——FASTA格式文件中序列GC含量计算&perl数组排序如何获得下标或者键
- 为结构体的字符数组成员赋十六进制形式表示的字符串
- 妙用0元素数组 实现大小可变结构体
- 结构体最后的长度为0或者1的数组
- C语言结构体里的成员数组和指针(C语言的一个隐晦角落——关于零数组)
- 一些可变长度对象(string对象、vector对象 ...)作为结构体或类的成员,会不会动态改变结构体或类所定义的变量的大小呢?
- C语言结构体里的成员数组和指针
- C语言结构体里的成员数组和指针
- 结构体中的数组成员的赋值问题
- NSArray(不可变数组)、NSMutableArray(可变数组)、数组排序、NSNumber(多态:数值和对象互转)、NSValue(将结构体转换成对象)
- 妙用0元素数组 实现大小可变结构体
- 长度为0的数组只用在结构体的最后一个成员,用以做一个地址标记,以后用。