Maison > développement back-end > C++ > le corps du texte

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

Susan Sarandon
Libérer: 2024-11-02 02:20:30
original
852 Les gens l'ont consulté

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

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

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!

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!