Chinaunix首页 | 论坛 | 博客
  • 博客访问: 94766
  • 博文数量: 17
  • 博客积分: 691
  • 博客等级: 上士
  • 技术积分: 220
  • 用 户 组: 普通用户
  • 注册时间: 2011-07-27 08:50
文章分类
文章存档

2012年(1)

2011年(16)

分类: LINUX

2011-09-21 16:37:45

只有GNU C允许使用这种用法,目的是为了访问不定长结构体时节省空间和便利性。我用下面这个例子来说明。
  1. struct demo {
  2.     int a;
  3.     char b[256];
  4.     char follow[0];
  5. };
假如,现在程序中要分配一个struct demo结构体,并紧邻其后分配长度为LEN个字节空间,则可以使用如下方法得到:

struct demo *demo = (struct demo *) malloc (sizeof(strcut demo) + LEN);
这样我们就可以用 demo->follow 来访问结构体demo随后的空间数据,非常方便。当然,我们可以使用指针来达到这样的目的。
  1. struct demo {
  2.     int a;
  3.     char b[256];
  4.     char *follow;
  5. };
  6. struct demo *demo = (struct demo *) malloc (sizeof(strcut demo) + LEN);
 
同样可以达到零长度数组的效果,但是却多分配了一个char指针。如果分配额外数据空间还好,否则就是白白浪费了空间。不过,很可惜,只有GNU C支持这种用法,其他C编译器不支持。不过,我想也很少有人去这么用的,权当是长长见识吧。
阅读(1719) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~