码迷,mamicode.com
首页 > 编程语言 > 详细

柔性数组

时间:2016-01-17 12:14:16      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:

柔性数组

typedef struct node

{

         int len;

         int a[];//或者写成int a[0];

}node;

         以上结构体中a就是所谓的柔性数组,柔性数组在C99标准中已经加入。

         柔性数组即大小不确定的数组,放在结构体最后。

         首先需要知道的是,sizeof(node)=4;不论是否给柔性数组后面的a分配了多少空间,sizeof(node)的值不变,均为4。并且,柔性数组只能出现在结构体中的最后一个变量上。若结构体中只有一个变量,则不能开创柔性数组,即不能开创下面这种柔性数组:

struct ss

{

         char b[];//数组类型并不一定限定于int、char等

};

 

         柔性数组和以下这种方式有什么区别呢?

typedef struct node1

{

         int len;

         int *a;//int *a可不需要放在结构体最后

}node1;

         首先sizeof(node1)=8而sizeof(node)=4。

并且如果要对node1中的a进行开创空间的步骤是:

node1 *k;

k=(node1 *)malloc(sizeof(node1));//首先给k开创node1大的空间

k->a=(int *)malloc(sizeof(int)*50);//给k->a开创50个int大的空间

最后释放空间的方式:free(k->a);free(k);

而对node开创同样大的空间方式是:

node *k;

k=(node *)malloc(sizeof(node)+50*sizeof(int));//向柔性数组a分配了50个int大小的空间

最后释放空间的方式为:free(k);

 

柔性数组

标签:

原文地址:http://www.cnblogs.com/zebfff/p/5136941.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!