空数组指长度为0的数组,仅可在类或者结构体中声明。
使用形式如下:
struct strTest
{
int a;
char cc[0];
};
定义空数组的好处有:
1. 不占用空间,如果是指针的话还需要4字节空间,而空数组不占用任何空间
2. 无需初始化,数组名直接就是所在的偏移,如果是指针则需要给指针赋值
如果查看结构体大小,则会发现空数组未占用任何空间:
int main()
{
printf("%d\n", sizeof(strTest)); //输出为4
return 0;
}
通常用来申请buff空间的写法是:
malloc(sizeof(strTest) + bufflen);
这样即可一次给结构体和缓冲区分配内存,减少使用和维护成本。