142 votes

comment tableau[100] = {0} définir l'ensemble du tableau à 0?

Comment le compilateur remplir les valeurs en char array[100] = {0};? Mais quelle est la magie?

Je voulais savoir comment l'interne du compilateur initialise.

168voto

bk1e Points 13737

C'est pas de la magie.

Le comportement de ce code en C est décrit dans la section 6.7.8.21 de la C spécification (en ligne projet de C spec): pour les éléments qui n'ont pas de valeur spécifiée, le compilateur initialise les pointeurs à NULL et l'arithmétique types à zéro (et récursivement les applique à des agrégats).

Le comportement de ce code en C++ est décrit dans la section 8.5.1.7 du C++ cahier des charges (en ligne projet de C++ spec): le compilateur par défaut initialise les éléments qui n'ont pas de valeur spécifiée.

Il est également à noter qu'en C++ (mais pas de C), vous pouvez utiliser un vide d'initialiseur de liste, provoquant le compilateur par défaut-initialiser tous les éléments de la matrice:

char array[100] = {};

Comme pour ce genre de code que le compilateur peut générer lorsque vous faites cela, jetez un oeil à cette question: Étrange assemblage de la matrice 0-initialisation

35voto

qrdl Points 17813

La mise en œuvre est en place pour les développeurs de compilateurs.

Si votre question est "ce qui va arriver à une telle déclaration" - compilateur va régler le premier élément du tableau de la valeur que vous avez fournie (0) et tous les autres seront mis à zéro parce que c'est une valeur par défaut pour omis les éléments du tableau.

27voto

lakshmanaraj Points 3145

Si votre compilateur est GCC, vous pouvez également utiliser la syntaxe suivante:

tableau int[256] = {[0 ... 255] = 0};

Merci de regarder

http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Designated-Inits.html#Designated-Inits

3voto

Liran Orevi Points 2126

Notez que si elle est globale ou statique, il sera (probablement) être dans le .sev segment

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X