Maison > développement back-end > C++ > Comment les structures et tableaux automatiques sont-ils partiellement initialisés en C et C ?

Comment les structures et tableaux automatiques sont-ils partiellement initialisés en C et C ?

DDD
Libérer: 2024-12-19 05:32:21
original
186 Les gens l'ont consulté

How are Automatic Structures and Arrays Partially Initialized in C and C  ?

Initialisation partielle des structures et tableaux automatiques en C et C

Le manuel de référence GNU C indique que si une variable de structure n'est pas initialisée, les valeurs de ses membres sont indéterminées. Cependant, les normes ne définissent pas l'initialisation partielle des structures ou des tableaux.

Terminologie de l'initialisation partielle

« Initialisation partielle » fait référence à la fourniture de certains initialiseurs, mais pas de tous, pour un agrégat (tableau ou structure).

Règles d'initialisation pour les structures automatiques et Tableaux

Les normes C et C spécifient les règles suivantes pour l'initialisation des structures et des tableaux automatiques :

  • Si l'agrégat est complètement initialisé (c'est-à-dire qu'il y a suffisamment d'initialiseurs pour tous les éléments ou membres), les éléments/membres initialisés se voient attribuer les valeurs spécifiées, tandis que les éléments/membres restants sont initialisés à zéro (pour les types intégraux) ou à NULL (pour types de pointeurs).
  • Si l'agrégat n'est pas initialisé, tous les éléments/membres sont indéterminés.

Comportement d'initialisation partielle

Même si l'initialisation partielle n'est pas explicitement définie dans les standards, tous les compilateurs traditionnels suivent le comportement suivant :

  • Pour tableaux automatiques, s'il y a moins d'initialiseurs que la taille du tableau, les éléments non initialisés sont initialisés à 0.
  • Pour les structures automatiques, s'il y a moins d'initialiseurs que le nombre de membres de la structure, les membres non initialisés ont de la valeur -initialisé. En C , cela signifie que les données membres de la classe sont initialisées par défaut, tandis que les données membres non-classes sont initialisées à zéro.

Exemple

Le C suivant le code initialise partiellement une structure :

struct S {
    int a;
    char* b;
    int c;
};

S s = {1, "asdf"};
Copier après la connexion

Dans cet exemple, s.a est initialisé à 1, s.b est initialisé à "asdf", et sc est initialisé à zéro car il n'est pas explicitement initialisé.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal