Je pense que nous devons savoir deux points à ce stade :
- Il n'y a pas de différence entre les variables ordinaires et les structures, si elles sont à portée locale, c'est-à-dire
automatic storage duration
. Ils contiendront des valeurs inutiles. L'utilisation de ces valeurs pourrait entraîner un comportement non défini.
La seule chose qui différencie les structs est que si vous initialisez au moins un des membres, le reste des membres sera mis à zéro, c'est-à-dire initialisé comme s'il n'avait pas été initialisé. static storage duration
. Mais ce n'est pas le cas lorsqu'aucun des membres n'est initialisé.
- Cela dépend de votre déclaration. Si votre déclaration se trouve en dehors de toute fonction ou avec la balise
static keyword
(plus précisément, a static storage duration
), la valeur initiale de x est a null pointer
(qui peut être écrit soit 0, soit NULL).
S'il est à l'intérieur d'une fonction, c'est-à-dire qu'il a automatic storage duration
sa valeur initiale est aléatoire (garbage).
Considérons le code suivant :
#include<stdio.h>
#include<unistd.h>
struct point {
int x, y;
char a;
double d;
};
typedef struct point Point;
void main(){
Point p1;
printf("\nP1.x: %d\n", p1.x);
printf("\nP1.y: %d\n", p1.y);
printf("\nP1.a: %d\n", p1.a);
printf("\nP1.d: %lf\n", p1.d);
Point p2 = {1};
printf("\nP2.x: %d\n", p2.x);
printf("\nP2.y: %d\n", p2.y);
printf("\nP2.a: %d\n", p2.a);
printf("\nP2.d: %lf\n", p2.d);
}
La sortie est :
P1.x: 0
P1.y: 66900
P1.a: 140
P1.d: 0.000000
P2.x: 1
P2.y: 0
P2.a: 0
P2.d: 0.000000
Une bonne lecture : C et C++ : Initialisation partielle de la structure automatique