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
Freigeben: 2024-12-11 10:05:15
Original
581 Leute haben es durchsucht

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];
}
Nach dem Login kopieren

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;
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage