-1
votes

Les indicateurs peuvent-ils contenir des valeurs nulelles?

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 */


0 commentaires

3 Réponses :


4
votes

Les instances des structures ne peuvent pas être nulles en soi, mais elles peuvent être égales à l'initialisation. xxx


0 commentaires

1
votes

à la définition la plus élémentaire null est défini comme 0 (généralement une macro dans le formulaire #define null 0 ) et est défini dans stdlib.h

SO null (ou sa valeur) pourrait être attribuer à une valeur entière ou à un type scalaire équivalent.

struct est le type de données composé (comme tableau s) et ne serait pas affecté à un type scalaire (court-circuit).


1 commentaires

Une implémentation peut définir null pour être zéro, mais C programmeurs ne peut pas compter sur cela. Per C 2018 7.19 3, le null macro se développe à une constante de pointeur Null de la mise en œuvre définie Null . 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 * . Lorsqu'une mise en œuvre choisit ce dernier, null a un type de pointeur; Ce n'est pas un entier 0.



1
votes

null signifie un pointeur qui pointe sur rien ou n'est vide. Une structure ne pointe nulle part, donc attribuant null à cela n'a pas de sens. Si vous souhaitez initialiser tous les champs de la structure à zéro, il n'est pas pertinent pour NULL

in c null est un pointeur NULL défini par la mise en œuvre constante , qui peut être

  • une expression constante entier avec la valeur 0
  • Une expression constante entier avec la valeur 0 coulé sur le type vide *

    donc si var = null 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 . 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

    voir Qu'est-ce qu'un pointeur NULL en C


0 commentaires