您的位置:首页 > 其它

柔性数组的使用

2016-06-12 15:14 267 查看
#include <stdio.h>
#include <malloc.h>
typedef struct _soft_array
{
int len;
int a[];
}SoftArray;

int main(void)
{
int i = 0;
printf("sizeof(SoftArray) = %d\n",sizeof(SoftArray));   //sizeof(len) = 4;a[]只起到占位符的作用
SoftArray* array = (SoftArray*)malloc(sizeof(SoftArray)+sizeof(int)*10);
array->len = 10;

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

for(i=0;i<10;i++)
{
printf("array->a[%d] = %d\n",i,array->a[i]);
}
printf("--end--\n");
return 0;
}


举例使用:

//斐波那契数列的使用

#include <stdio.h>
#include <malloc.h>
typedef struct _soft_array
{
int len;
int a[];
}SoftArray;

SoftArray* createArray(int size)
{
printf("create array...\n");
SoftArray* ret = NULL;
if(size > 0)
{
ret = (SoftArray*)malloc(sizeof(*ret) + size * sizeof(*(ret->a)));
//ret = (SoftArray*)malloc(sizeof(SoftArray) + size * sizeof(int));  //与上面等价
ret->len = size;
}
return ret;
}

void fibonacci(SoftArray* sa)
{
printf("create fibonacci array...\n");
int i = 2;
if(sa != NULL)
{
if(sa->len == 1)
{
sa->a[0] = 1;
}
else
{
sa->a[0] = 1;
sa->a[1] = 1;
for(i=2;i<sa->len;i++)
{
sa->a[i] = sa->a[i-1] + sa->a[i-2];
}
}
}
}

void deleteArray(SoftArray* sa)
{
printf("free array...\n");
free(sa);
}

int main(void)
{
int i = 0;
printf("sizeof(SoftArray) = %d\n",sizeof(SoftArray));   //sizeof(len) = 4;a[]只起到占位符的作用
SoftArray* array = createArray(10);

fibonacci(array);

printf("len = %d\n",array->len);

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

deleteArray(array);
printf("--end--\n");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: