Maison  >  Article  >  développement back-end  >  Les structures C peuvent-elles être initialisées à l’aide d’initialiseurs désignés pour les membres pointeurs ?

Les structures C peuvent-elles être initialisées à l’aide d’initialiseurs désignés pour les membres pointeurs ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-02 02:20:30853parcourir

Can C   Structures Be Initialized Using Designated Initializers for Pointer Members?

Initialisation de structures en C

On s'est demandé s'il était possible d'initialiser des structures en C en utilisant la syntaxe suivante :

struct address {
    int street_no;
    char *street_name;
    char *city;
    char *prov;
    char *postal_code;
};

address temp_address = { .city = "Hamilton", .prov = "Ontario" };

Bien que certaines sources suggèrent que ce style n'est pris en charge qu'en C, cela n'est pas tout à fait exact.

Limites techniques

Bien que C prenne en charge l'initialisation de la structure à l'aide de initialiseurs, il existe une limitation technique : l'initialisation désignée n'est pas prise en charge pour les membres qui sont des pointeurs ou des références. Étant donné que street_name, city, prov et postal_code sont tous des pointeurs dans l'exemple fourni, la syntaxe d'initialisation désignée ne peut pas être utilisée pour initialiser ces membres.

Bonnes pratiques et lisibilité

Bien que la syntaxe d'initialisation désignée puisse offrir une lisibilité claire, il est généralement considéré comme une bonne pratique d'initialiser les structures en utilisant une combinaison de constructeurs par défaut et d'initialisation explicite des membres. Cela vous permet de spécifier quels membres initialiser explicitement et lesquels laisser non initialisés.

Par exemple, vous pouvez initialiser la structure temp_addres comme suit :

address temp_addres = {
  0,  // street_no
  nullptr,  // street_name
  "Hamilton",  // city
  "Ontario",  // prov
  nullptr,  // postal_code
};

Cette approche offre une lisibilité claire en utilisant commentaires pour identifier chaque membre et sa valeur. De plus, cela garantit que tous les pointeurs non explicitement initialisés sont définis sur nullptr pour des raisons de sécurité.

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