变长数据结构

struct dirent{
.......
.......
char a[1];}
在这里char a[1];长度为1,一般认为作为字符数组只能存放'/0',但在这里a[1]声明是
放在结构体的最后,属于变长数据结构的使用,能够方便访问结构体后面的地址,如:
[Copy to clipboard] [ - ]CODE: 

struct dirent
{
   int len;
   char a[0];
};
struct dirent *fun(char *str, int len)
{
   struct dirent* n = (struct dirent*)malloc(len +1 + sizeof(struct dirent));
   if (!n)
      return NULL;
   n->len = len;
   memcpy(n->a, str, len);
   return n;
}

在使用malloc时扩展size,它正好在struct的尾端(char a[0]或char a[1]必须作为结构体最后成员),
在内存中,扩展的地址跟最后一个成员char p[0]相邻,也就是说通过p也可以实现访问,
用char p[0]比char *p的好处是:
(1) 前者malloc之后不需要给p赋值,因为前者是array.
(2) 前者实现了一个动态数组的功能,如果不需要,他根本就可以不占用任何内存,而后者会占用4个字节.
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值