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?

4
Jayesh 11 sept. 2017 à 08:36

2 réponses

Meilleure réponse

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.

13
StoryTeller - Unslander Monica 11 sept. 2017 à 05:38

À 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.

1
Codor 11 sept. 2017 à 05:37