Comme votre str
a champ de fonction et pas spécificateur de classe de stockage, il a durée de stockage automatique par défaut. Cela signifie qu'il existe tant que l'exécution ne sort pas de sa portée (la fonction main()
). La réponse à votre question est la suivante: L'implémentation doit réserver de la mémoire pour cette variable chaque fois que main()
est entré. Mais la mise en œuvre serait toujours libre de le faire plus tôt, car cela ne conduirait pas à un comportement observable différent.
En ce qui concerne votre autre question, il n'y a rien dans la spécification de C vous dire quelque chose sur les adresses. Très probablement, votre implémentation utilise une pile d'appels pour stocker les variables locales (automatiques) et dans votre système, cette pile d'appels est toujours située à la même adresse virtuelle. Mais c'est une supposition, une implémentation peut faire ce qu'elle veut.
pouvez-vous me dire pourquoi vous pensez que ce ne devrait pas être ainsi? –
Ceci est totalement spécifique à l'implémentation. –
Les variables de pile sont attribuées dès que la fonction est appelée ou que le bloc de defitnition est entré. BTW: 'main' devrait retourner une certaine valeur. Pour imprimer une adresse, le spécificateur de format '% p' doit être utilisé et l'adresse doit être convertie en' (void *) '. – Gerhardh