零長度陣列
在 C 中,可以定義包含零長度陣列的結構。這被稱為 C-Hack,在某些情況下很有用。
案例研究
最近的程式碼重構揭示了幾個具有零長度數組的結構,例如如:
struct someData { int nData; BYTE byData[0]; }
為什麼長度為零數組?
通常,編譯器會針對零長度數組產生警告,但在這種情況下,警告會被抑制。使用零長度數組的一個可能原因是允許在運行時創建任意長度的數組。
使用零長度數組建立結構
嘗試建立使用「new」運算符的零長度數組的新結構將導致錯誤。相反,可以使用以下技術:
struct someData* mallocSomeData(int size) { struct someData* result = (struct someData*)malloc(sizeof(struct someData) + size * sizeof(BYTE)); if (result) { result->nData = size; } return result; }
此函數為 someData 類型的物件及其指定大小的 byData 陣列分配記憶體。
替代方法
在許多情況下,更合適的方法是使用長度為 1 的指針或數組,而不是長度為零的數組 大批。這將消除對自訂記憶體分配的需要,並使程式碼更具可讀性和可維護性。
結論
在某些情況下,零長度數組可能是一種有用的技術,但應謹慎使用。在大多數情況下,替代方法(例如長度為 1 的指標或陣列)更合適,並且會使程式碼更易於理解和維護。
以上是為什麼在 C 結構中使用零長度數組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!