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 ?
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!