#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;
}