J'essayais de définir une structure à NULL, mais le compilateur disait "initialiseur invalide", mais au moment où j'ai fait un pointeur pour cette structure, cela fonctionnait correctement.
struct node { int value; struct node * left; struct node * right; }; struct node a = NULL; /* doesn't work */ struct node * b = NULL; /* works fine */
3 Réponses :
Les instances des structures ne peuvent pas être nulles en soi, mais elles peuvent être égales à l'initialisation.
à la définition la plus élémentaire SO null code> est défini comme
0 code> (généralement une macro dans le formulaire
#define null 0 code>) et est défini dans
stdlib.h code> p>
null code> (ou sa valeur) pourrait être attribuer à une valeur entière ou à un type scalaire équivalent. P>
struct code> est le type de données composé (comme
tableau code> s) et ne serait pas affecté à un type scalaire (court-circuit). P>
Une implémentation peut définir null code> pour être zéro, mais C programmeurs ne peut pas compter sur cela. Per C 2018 7.19 3, le
null code> macro se développe à une constante de pointeur Null de la mise en œuvre définie Null i>. Per 6.3.2.3 3, une constante de pointeur NULL est une expression constante entière avec la valeur 0 ou une telle expression mise à la section
Void * code>. Lorsqu'une mise en œuvre choisit ce dernier,
null code> a un type de pointeur; Ce n'est pas un entier 0.
in c donc si null code> signifie un pointeur qui pointe sur rien ou n'est vide. Une structure ne pointe nulle part, donc
null code> est un pointeur NULL défini par la mise en œuvre constante
, qui peut être p>
var = null code> fonctionne si var est un type arithmétique et null est défini comme 0, mais ne sera probablement pas lorsque NULL est défini comme
(void *) 0 code >. Quoi qu'il en soit sémantiquement, cela ne signifie pas que l'entier est un pointeur nul, c'est juste une variable avec la valeur 0 p>