长度为0的数组在GNU C是可以使用的,在定义一个变长对象的结构体是非常有用的。
请看下例。
struct line {
int length;
char contents[0];
};
struct line *thisline = (struct line *)
malloc (sizeof (struct line) + this_length);
thisline->length = this_length;
显然这样的代码要比下面的定义节省空间
struct line {
int length;
char *contents;
};
struct line {
int length;
char contents[1];
};
///////////////////////////
一般情况下,我们在结构的最末放置一个长度为0的数组,该数组不占用任何空间,但是在某些时候可以当作指针用。
例如我们申请一块比Sizeof(X)大sizeof(长度为0的数组的元素类型Y)的空间。此时X.y指针即可将后面的空白内存当作自己的地盘来指。
阅读(1722) | 评论(0) | 转发(0) |