以前確實沒關注過這個問題,一直都是直接定義固定長度的數組,盡量減少指針的操作。
?柔性數組主要是再結構體里面定義一個長度為0的數組,這里和定義一個指針式存在明顯去別的。定義一個指針會占用內存,但是定義一個長度為0的數組不會占用空間。
以下具體的使用例程:
//結構體定義
strcut Test
{int number;char buf[0]; //柔性數組
};int main(void)
{struct Test* ptr = null; //創建指針/*動態分配大小,這里是柔性數組實現的關鍵部分根據上面的描述,結構體實際上空間只有4個Byte后續增加的空間,就是柔性數組的大小,實現不定長數組。*/ptr = (struct Test*)malloc(sizeof(struct Test) + 40);ptr->number = 20;if(ptr != null){printf("分配成功\n");for(int i = 0;i < ptr->number){ptr->buf[i] = i;printf("%d" ,ptr->buf[i]);}printf("測試完畢\n");//釋放free(ptr);//消除野指針ptr = null;}else{printf("分配失敗\n");}return 0;
}
總體來說,柔性數組具有極大的靈活性,主要是用作底層接口實現,對外只需要使用一個指針實現不定長數組,減少代碼的風險。