La réponse à votre question poing est « non », seule la variable initialisées explicitement sera attribué. Les autres peuvent avoir n'importe quelle valeur, (y compris zéro).
Pour répondre à votre deuxième (plus intéressant) question (qui méritait peut-être une question distincte):
Le terme « unitialised » signifie simplement qu'aucune valeur est explicitement attribuée à l'instanciation; la valeur correspond à tout ce qui se trouve dans l'emplacement de mémoire associé à ce moment-là. Certains environnements remplissent la pile avec zéro au début de l'exécution, donc dans les exemples triviaux, zéro est probable. Cependant, cela ne sera pas toujours le cas lorsque la pile est retournée pendant l'exécution et contient des valeurs différentes du code précédemment exécuté.
Par exemple, dans ce qui suit, il est probable que a
dans fn()
ne sera pas nul pour chaque appel (ou peut-être un appel) et va changer entre les appels:
void fn()
{
static int i = 1 ;
volatile int a ;
printf("Call %d: a = %d\n", i, a) ;
i++ ;
a = i ;
}
int main()
{
for(int i = 0; i < 10; i++)
{
fn() ;
}
}
Dans mon test (à ideone. com), il génèrerait les éléments suivants:
Call 1: a = 134513970
Call 2: a = 2
Call 3: a = 3
Call 4: a = 4
Call 5: a = 5
Call 6: a = 6
Call 7: a = 7
Call 8: a = 8
Call 9: a = 9
Call 10: a = 10
Comme vous pouvez le voir dans les appels deuxième et les suivants qu'il contient tout ce qui a été laissé à cet endroit de l'appel précédent, car le même pile l'emplacement est réutilisé. Un modèle d'appel différent - par exemple, insérer un appel de fonction avant ou après fn()
produira un résultat différent et moins prévisible lorsque cette zone de pile est réutilisée par d'autres fonctions. Par exemple, lorsque j'ai modifié le corps de la boucle comme suit:
rand() ;
fn() ;
Le résultat a été:
Call 1: a = 1433091188
Call 2: a = 1433091188
Call 3: a = 1433091188
Call 4: a = 1433091188
Call 5: a = 1433091188
Call 6: a = 1433091188
Call 7: a = 1433091188
Call 8: a = 1433091188
Call 9: a = 1433091188
Call 10: a = 1433091188
dépend de l'action du compilateur. –
Vous auriez probablement dû poser les deux questions séparément. – Clifford