零长数组(柔性数组)
定义
struct ZeroArr{
int iLen;
TYPE data[0];
};
内存空间的申请
ZeroArr *zeroArr = ( ZeroArr* )malloc( sizeof( ZeroArr ) + sizeof( TYPE ) * MAXLEN );
if( zeroArr != nullptr )
{
zeroArr->iLen = MAXLEN;
}
注:MAXLEN为最大长度;
赋值 & 使用
for( int i = 0; i < zeroArr->iLen; i++ )
{
TYPE type;
// assign value to type
// ... ...
zeroArr->data[i] = type;
}
内存释放
if( zeroArr != nullptr )
{
free( zeroArr );
zeroArr = nullptr;
}
总结
- 零长数组主要是为了满足变长的结构体的实现;
- 在零长数组的结构体中,数据域是没有占据空间的,只是为数组头地址占位;
- 在网络通信时,接收或发送的数据包长度并不确定,零长数组的存在能节省大量空间;