Pourquoi printf () imprime 0 au lieu de 10 dans le code suivant?

Si je comstack et exécute le code suivant, il affiche 0 au lieu de 10.

#include main() { int Var=10; { char Var=Var; printf("%d",Var); } } 

Pourquoi cela imprime 0 et pourquoi pas 10?

Parce que dans la déclaration locale

  char Var=Var; 

la bonne occurrence de Var fait référence au Var local, pas au Var . Comme Alk commenté, il s’agit d’ un comportement indéfini à atsortingbuer à partir d’une variable non initialisée.

Donc, votre déclaration n’initialise pas du tout Var , c.-à-d. Var contient des ordures. Dans votre cas particulier, cette poubelle se trouve être 0.

BTW, avoir deux homonymes Var dans la même fonction est vraiment mauvais goût.

Comme cette réponse l’ indique, vous devriez comstackr avec gcc -Wall -Wshadow pour obtenir des avertissements sur votre code. (ajoutez également -g pour obtenir des informations de débogage afin de pouvoir déboguer avec gdb )

En supposant que vous utilisez gcc, vous voudrez activer -Wshadow ( http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html ). Cela ferait apparaître une erreur à la variable interne portant le même nom que la variable externe. Le zéro est une valeur aléatoire. Il pourrait imprimer des déchets à cet endroit.

essaye ça

 #include main() { int Var1=10; { char Var=Var1; printf("%d",Var); } }