Il y a confusion entre ce que la norme appelle 'null pointer constant' et 'null pointer'.
Un 'null pointer' est une adresse invalide, dépendant de la plateforme. C'est une valeur.
0 ou (void *)0 est une 'null pointer constant' (par définition), c'est une expression, un élément du langage.
Ces deux trucs n'appartienent pas au même monde: un 'null pointer' c'est un truc qui existe dans le programme compilé et lors de l'éxecution, un 'null pointer constant' ça existe dans le code source.
Le norme dit que quand tu stocke un 'null pointer constant' dans une variable de type pointeur, le compilateur utilise la valeur 'null pointer'. La norme ne donne pas la valeur d'un 'null pointer', mais elle donne la valeur de NULL: c'est une macro qui resprésente une 'null pointer constant'.
[^] # Re: Petites precisions
Posté par Vivi . En réponse au journal J'adore Linus. Évalué à 3.
Un 'null pointer' est une adresse invalide, dépendant de la plateforme. C'est une valeur.
0 ou (void *)0 est une 'null pointer constant' (par définition), c'est une expression, un élément du langage.
Ces deux trucs n'appartienent pas au même monde: un 'null pointer' c'est un truc qui existe dans le programme compilé et lors de l'éxecution, un 'null pointer constant' ça existe dans le code source.
Le norme dit que quand tu stocke un 'null pointer constant' dans une variable de type pointeur, le compilateur utilise la valeur 'null pointer'. La norme ne donne pas la valeur d'un 'null pointer', mais elle donne la valeur de NULL: c'est une macro qui resprésente une 'null pointer constant'.