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

 

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