您的位置:首页 > 其它

struct{char data[0]}柔性数组

2017-03-29 17:43 211 查看


 柔性数组

* 柔性数组即数组大小待定的数组

 

* C语言中结构体的最后一个元素可以是大小未知的数组
 

* C语言中可以由结构体产生柔性数组

#include <stdio.h>
#include <malloc.h>

typedef struct _soft_array
{
int len;
int array[];
}SoftArray;

int main()
{
int i = 0;
SoftArray* sa = (SoftArray*)malloc(sizeof(SoftArray) + sizeof(int) * 10);

sa->len = 10;

for(i=0; i<sa->len; i++)
{
sa->array[i] = i + 1;
}

for(i=0; i<sa->len; i++)
{
printf("%d\n", sa->array[i]);
}

free(sa);

return 0;
}


 

柔性数组的结构如何只能堆上生成

柔性数组是C99的扩展,简而言之就是一个在struct结构里的标识占位符(不占结构struct的空间)。
声明

typedef struct zero_array
{
size_t len;
void * array[0];
}zero_array_t;


 
大小
可以用sizeof 看看其大小

printf("%d\n",sizeof(zero_array_t));//CentOS5.6 32 下输出4


zero_array_t 后面跟着一块len的数组,内存布局有兴趣的同学会画一下。
转载地址:http://www.cnblogs.com/Daniel-G/archive/2012/12/02/2798496.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  struct 柔性数组