C/C++柔型数组

1、什么是柔性数组?柔性数组既数组大小待定的数组, C语言中结构体的最后一个元素可以是大小未知的数组,也就是所谓的0长度,所以我们可以用结构体来创建柔性数组。

2、柔性数组有什么用途 ?它的主要用途是为了满足需要变长度的结构体,为了解决使用数组时内存的冗余和数组的越界问题。

3、用法:在一个结构体的最后 ,申明一个长度为空的数组,就可以使得这个结构体是可变长的。对于编译器来说,此时长度为0的数组并不占用空间,因为数组名本身不占空间,它只是一个偏移量, 数组名这个符号本身代 表了一个不可修改的地址常量 (注意:数组名永远都不会是指针),但对于这个数组的大小,我们可以进行动态分配,对于编译器而言,数组名仅仅是一个符号,它不会占用任何空间,它在结构体中,只是代表了一个偏移量,代表一个不可修改的地址常量,对于柔性数组的这个特点,很容易构造出变长结构体,如缓冲区,数据包等等。

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

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

int main(void)
{
    int len = 10,i = 0;
    
    SoftArray *p = (SoftArray *)malloc(sizeof(SoftArray) + sizeof(int) * len);
    p->len       = len;

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

    free(p);
    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章