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
Libérer: 2024-12-11 10:05:15
original
581 Les gens l'ont consulté

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];
}
Copier après la connexion

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;
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal