首页 > 编程语言 > 详细

柔性数组

时间:2016-01-17 12:11:05      阅读:142      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!