Chinaunix首页 | 论坛 | 博客
  • 博客访问: 153891
  • 博文数量: 37
  • 博客积分: 2510
  • 博客等级: 少校
  • 技术积分: 380
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-13 18:49
文章分类

全部博文(37)

文章存档

2010年(1)

2009年(19)

2008年(17)

我的朋友

分类: C/C++

2009-11-20 15:42:33

长度为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指针即可将后面的空白内存当作自己的地盘来指。
阅读(1678) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~