Heim >Backend-Entwicklung >C++ >Warum Arrays mit der Länge Null in C-Strukturen verwenden?

Warum Arrays mit der Länge Null in C-Strukturen verwenden?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-11 10:05:15580Durchsuche

Why Use Zero-Length Arrays in C Structs?

Array mit der Länge Null

Das Refactoring von altem Code kann fragwürdige Praktiken aufdecken, wie die Verwendung von Arrays mit der Länge Null in Strukturen. Dies wirft die Frage auf: Warum ein Array ohne Elemente erstellen?

Bedenken Sie die folgende Struktur:

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

Ein Array mit der Länge Null, wie es in byData zu sehen ist, ist eine ungewöhnliche Wahl. Typischerweise speichern Arrays Elemente. Als Zeiger können jedoch Arrays der Länge 0 verwendet werden. In diesem Fall dient byData als Platzhalter für einen Puffer variabler Länge, der später dynamisch zugewiesen wird.

struct someData* mallocSomeData(int size)
{
    struct someData*  result = (struct someData*)malloc(sizeof(struct someData) + size * sizeof(BYTE));
    if (result)
    {    result->nData = size;
    }
    return result;
}

Diese Funktion reserviert Speicher für eine someData-Struktur und einen Puffer der angegebenen Länge. Das Array mit der Länge Null in der Struktur ermöglicht es uns, es als Zeiger zu behandeln, der auf den dynamisch zugewiesenen Puffer verweist.

Um diesen Code umzugestalten, sollten Sie Folgendes verwenden:

  • Zeiger : Ersetzen Sie das Array mit der Länge Null durch einen direkten Zeiger auf den Puffer und weisen Sie den Puffer zu separat.
  • Arrays der Länge 1: Erstellen Sie ein Array der Länge 1 und verwenden Sie das erste Element als Zeiger auf den Puffer.

Das obige ist der detaillierte Inhalt vonWarum Arrays mit der Länge Null in C-Strukturen verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn