零长度数组(柔性数组),一般用于可变结构体中,如:
struct Packet
{
int state;
int len;
char cData[0]; //这理是一个零长度数组
};
用途 : 长度为0的数组的主要用途是为了满足需要变长度的结构体
用法 : 在一个结构体的最后, 申明一个长度为0的数组, 就可以使得这个结构体是可变长的. 对于编译器来说, 此时长度为0的数组并不占用空间, 因为数组名本身不占空间, 它只是一个偏移量, 数组名这个符号本身代表了一个不可修改的地址常量
如下例子:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct str{
int length;
char array[0];
};
int main(void)
{
int len = 10;
struct str *str = (struct str *)malloc(sizeof(struct str) + len);
str->length = len;
memset(str->array, '#', len);
printf("str->length=%d, str->array[]=%s\n", str->length, str->array);
return 0;
}
PS:
关于结构体中.与->的区别:
点(.)是用于结构体变量访问成员,
箭头(->)是用于结构体指针访问成员。