C 零长度数组

来源:互联网 发布:网络剧错爱一生片尾曲 编辑:程序博客网 时间:2024/05/04 19:56

在C语言中,数组大小是固定的,没有变长度的,为了达到获取变量长度的数组,提供了零长度数组这样的方式来实现,如定义一个结构体:

struct Test{int length;char contents[0];};
这样,结构体本身长度=sizeof(int),也就是一个整型长度,contents是不占空间的,然后在程序调用中,可以采用如下:

struct Test *t = (struct Test*) malloc(sizeof(struct Test) + 10);t->length = 10;
那么这个时候,t所占的空间就是sizeof(struct Test) + 10,多出来的空间正好可以有t->contents来指向,并且该数组的长度就是t->length,这样就可以获取到动态数组;

但是这样做也有缺点,那就是零长度数组可以用于堆空间,但是不能够用于栈空间,即如果是 struct Test test; 这样定义,那么test的长度就是确定,而contents也没法由程序主动分配而获得额外的空间,即在这个时候,test的长度仅仅就是 sizeof(struct Test),也即是 sizeof(int)的大小。


原创粉丝点击