Dans la partie de données de charge d'un programme écrit en langage C, je vois que l'initialisation d'un tampon est effectuée comme ceci: mais je ne suis pas sûr de quelles valeurs sont attribuées par cette déclaration. S'il vous plaît partager des idées. P> Cela dépend-il du compilateur ou est-ce une fonctionnalité de langue? P> et quel est le point à l'aide d'une virgule après zéro, si cette déclaration est équivalente à : p> est-ce, par hasard, car le codeur souhaite seulement s'assurer que le premier élément est zéro et ne vous souciez pas du reste? P > p>
4 Réponses :
la valeur donnée (un seul Avez-vous dit 0 code> dans ce cas) est utilisé, puis tous les autres membres sont remplis de zéros. P>
tampon de char [100] = {1,}; code>, le tableau contiendrait un zéros 1 et 99. P>
tampon [100] = {littéral,} code> initialise le premier élément à la valeur littérale et le reste à 0 code> .In l'autre main ] = {0} code> initialise tous les éléments à 0 code> .Votre code est équivalent à tampon [100] = {0} code> comme les deux initialize à 0 Le tampon de .Richiehindle [100] = {1,} code> illustre tout le point. P>
Les initialiseurs pour une matrice d'une taille donnée sont attribués aux éléments de réseau d'une seule à une seule. S'il y a trop peu d'initialiseurs pour tous les membres, les membres restants sont initialisés à 0. La liste trop d'initialistes pour une matrice de taille donnée est une erreur. P>
Merci d'avoir partagé vos idées, MédiRuff.
Cela dépend-il du compilateur ou est-ce une fonctionnalité de langue? P> blockQuote>
Le comportement est spécifié par la norme de langue. La norme actuelle (
C11 § 6.7.9 Initialisation / 21 Strong>, qui est à la page 141) décrit ce qui se passe lorsque vous fournissez moins d'initialistes que des éléments d'un agrégat: P> S'il y a moins d'initialiseurs dans une liste bloquée par une attelle que des éléments ou des membres d'un agrégat ou moins de caractères dans un littéral à chaîne utilisée pour initialiser un tableau de taille connue que des éléments de la matrice, le reste de L'agrégat doit être initialisé implicitement la même chose que des objets ayant une durée de stockage statique. P> blockQuote>
Donc, les éléments non spécifiés sont initialisés à
\ 0 code>. p>
Ah! A l'avant de la section 6.7.9 Initialisation de C11 < / a>, la syntaxe prend en charge explicitement le format de {0,} code> comme {liste d'initialisateur,} code>.
Vous ne pouvez pas simplement vérifier les valeurs de chaque élément?
Oh, c'est idiot de moi. Mais que se passe-t-il si cela dépend du compilateur ou de quelque chose?
Très bien, tout est "\ 0 'pour tous les éléments de tampon [0] à tampon [255] (sous Xcode IDE, compilateur Apple LLVM 4.2).
Une question très liée: Comment initialiser un tableau en C? < / a>