定长数组使用方便, 但是却浪费空间, 指针形式只多使用了一个指针的空间, 不会造成大量空间分浪费, 但是使用起来需要多次分配, 多次释放, 那么有没有一种实现方式能够既不浪费空间, 又使用方便的呢?
GNU C
的0长度数组(变长数组/柔性数组)就是这样一个扩展. 对于0长数组的这个特点,很容易构造出变成结构体,如缓冲区,数据包等等:
// 0长度数组
struct zero_buffer
{
int len;
char data[0];
};
这样的变长数组常用于网络通信中构造不定长数据包, 不会浪费空间浪费网络流量, 因为char data[0];
只是个数组名, 是不占用存储空间的,
即 sizeof(struct zero_buffer) = sizeof(int)
我们使用的时候, 只需要开辟一次空间即可:
/// 开辟
if ((zbuffer = (struct zero_buffer *)malloc(sizeof(struct zero_buffer) + sizeof(char) * CURR_LENGTH)) != NULL)
{
zbuffer- >len = CURR_LENGTH;
memcpy(zbuffer- >data, "Hello World", CURR_LENGTH);
printf("%d, %sn", zbuffer- >len, zbuffer- >data);
}
释放也是一样的, 一次释放即可:
/// 销毁
free(zbuffer);
zbuffer = NULL;
全部0条评论
快来发表一下你的评论吧 !