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