Dans le programme suivant, ptr
pointe vers la variable non initialisée x
. Avant d'imprimer ptr
, j'ai attribué 10
à ptr
et je l'imprime.
#include <stdio.h>
int main()
{
int *ptr;
int x;
ptr = &x;
*ptr = 10;
printf(" x = %d\n", x);
printf(" *ptr = %d\n", *ptr);
}
ptr
et x
affichent la valeur correcte. Mais je doute, S'agit-il d'un comportement défini?
2 réponses
Oui, ça l'est. Vous attribuez une valeur valide à ptr
, puis utilisez l'indirection pour attribuer une valeur valide à x
.
L'adresse d'une variable comme x
et sa valeur sont des choses distinctes. Une fois le stockage alloué, la prise de l'adresse est toujours bien définie, quelle que soit la valeur de la variable.
À ma connaissance, il s'agit d'un comportement défini, car il n'est pas nécessaire d'initialiser la mémoire avant d'y écrire.
Questions connexes
De nouvelles questions
c
C est un langage de programmation à usage général utilisé pour la programmation système (OS et embarqué), les bibliothèques, les jeux et les plateformes multiples. Cette balise doit être utilisée avec des questions générales concernant le langage C, tel que défini dans la norme ISO 9899 (la dernière version, 9899: 2018, sauf indication contraire - également balise les demandes spécifiques à la version avec c89, c99, c11, etc.). C est distinct de C ++ et il ne doit pas être combiné avec la balise C ++ en l'absence d'une raison rationnelle.