Dans ce programme, lorsque p()
est appelée pour la première fois, elle imprime 0
(je me rends compte qu'elle peut simplement imprimer des données parasites sur certains systèmes).La variable locale dans la fonction conserve sa valeur lorsque la fonction est appelée à nouveau
Mais la deuxième fois que p()
est appelée, elle imprime 2
même si y
est à nouveau déclaré. Il semble conserver la valeur y
lorsque p()
a été appelée pour la première fois.
Je suis très confus quant à pourquoi. Quelqu'un peut-il aider à expliquer? Et aussi comment je peux modifier la fonction principale pour le faire ne pas le faire?
void p()
{
int y;
printf ("%d ", y);
y = 2;
}
void main()
{
p();
p();
}
Vous imprimez une variable non initialisée. C'est un comportement indéfini et vous ne pouvez pas vous attendre à un résultat particulier. Quelques lectures pour vous: [comportement indéfini, non spécifié et implémenté] (https://stackoverflow.com/questions/2397984/undefined-unspecified-and-implementation-defined-behavior) et [Est-ce que "Undefined Behavior" permet vraiment * quoi que ce soit * à se produire?] (https://stackoverflow.com/questions/32132574/does-undefined-behavior-really-permit-anything-to-happen) – kaylum
On ne sait pas exactement ce que vous voulez réellement faire. Réglez juste 'y' pour avoir la valeur que vous voulez avant de l'imprimer. Et la dernière instruction dans 'p' est inutile car' y' est une variable locale et ainsi la fixer n'a de sens que si elle doit être utilisée plus tard dans cette même fonction. – kaylum
C'est quelque chose que vous devriez ignorer, ne vous inquiétez pas. Si vous appelez la même fonction dos-à-dos, alors il y a de fortes chances qu'elle récupère l'ancienne valeur, puisqu'elle sera recherchée au même endroit. Mais vous ne pouvez pas compter sur cela. –