首頁 >後端開發 >C++ >為什麼在 C 結構中使用零長度數組?

為什麼在 C 結構中使用零長度數組?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-11 10:05:15579瀏覽

Why Use Zero-Length Arrays in C Structs?

零長度數組

重建舊程式碼可以發現有問題的做法,例如在結構中使用零長度數組。這就提出了一個問題:為什麼要建立一個沒有元素的陣列?

考慮以下結構:

struct someData
{
   int nData;
   BYTE byData[0];
}

零長度數組,如 byData 所示,是一個不尋常的選擇。通常,數組儲存元素。但是,長度為 0 的陣列可以用作指標。在本例中,byData 用作稍後動態分配的可變長度緩衝區的佔位符。

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 結構和指定長度的緩衝區分配記憶體。結構中的零長度數組允許我們將其視為指針,引用動態分配的緩衝區。

要重構此程式碼,請考慮使用:

  • 指標: 將零長度陣列替換為指向緩衝區的直接指標並指派緩衝區
  • 長度為1 的陣列: 建立一個長度為 1的數組,並使用第一個元素作為指向緩衝區的指標。

以上是為什麼在 C 結構中使用零長度數組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn