8
votes

Comment l'initialisation utilise-t-elle la mémoire tampon [100] = {0,} fonctionne en langage C?

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: xxx

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.

Cela dépend-il du compilateur ou est-ce une fonctionnalité de langue?

et quel est le point à l'aide d'une virgule après zéro, si cette déclaration est équivalente à : xxx

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?

c

4 commentaires

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>


4 Réponses :


6
votes

la valeur donnée (un seul 0 dans ce cas) est utilisé, puis tous les autres membres sont remplis de zéros.

Avez-vous dit tampon de char [100] = {1,}; , le tableau contiendrait un zéros 1 et 99.


0 commentaires

4
votes

tampon [100] = {littéral,} initialise le premier élément à la valeur littérale et le reste à 0 .In l'autre main ] = {0} initialise tous les éléments à 0 .Votre code est équivalent à tampon [100] = {0} comme les deux initialize à 0 Le tampon de .Richiehindle [100] = {1,} illustre tout le point.


0 commentaires

1
votes

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.


1 commentaires

Merci d'avoir partagé vos idées, MédiRuff.



12
votes

Cela dépend-il du compilateur ou est-ce une fonctionnalité de langue?

Le comportement est spécifié par la norme de langue. La norme actuelle ( C11 § 6.7.9 Initialisation / 21 , 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:

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.

Donc, les éléments non spécifiés sont initialisés à \ 0 .