标签:
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