柔性数组的使用

来源:互联网 发布:php strncmp函数 编辑:程序博客网 时间:2024/04/30 08:00
#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;}
0 0