Maison >développement back-end >C++ >Pourquoi utiliser des tableaux de longueur nulle dans les structures C ?

Pourquoi utiliser des tableaux de longueur nulle dans les structures C ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-11 10:05:15580parcourir

Why Use Zero-Length Arrays in C Structs?

Tableau de longueur nulle

La refactorisation d'un ancien code peut révéler des pratiques douteuses, comme l'utilisation de tableaux de longueur nulle dans les structures. Cela soulève la question : Pourquoi créer un tableau sans éléments ?

Considérez la structure suivante :

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

Un tableau de longueur nulle, comme le montre byData, est un choix inhabituel. En règle générale, les tableaux stockent des éléments. Cependant, les tableaux de longueur 0 peuvent être utilisés comme pointeurs. Dans ce cas, byData sert d'espace réservé pour un tampon de longueur variable qui sera alloué dynamiquement ultérieurement.

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

Cette fonction alloue de la mémoire pour une structure someData et un tampon de la longueur spécifiée. Le tableau de longueur nulle dans la structure nous permet de le traiter comme un pointeur, faisant référence au tampon alloué dynamiquement.

Pour refactoriser ce code, pensez à utiliser :

  • Pointeurs : Remplacez le tableau de longueur nulle par un pointeur direct vers le tampon et allouez le tampon séparément.
  • Tableaux de longueur 1 : Créez un tableau de longueur 1 et utilisez le premier élément comme pointeur vers le tampon.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn