Au lieu de NULL, devrais-je écrire «0x0» ou «0»?
Je sais que vous êtes supposé utiliser 0
au lieu de NULL en c++ (même si NULL
est défini comme 0
en C++, la plupart du temps).
Récemment je suis tombé sur un code où 0x0
a été utilisé au lieu de cela, cependant.
Quelle est la différence?
source d'informationauteur moka
Vous devez vous connecter pour publier un commentaire.
0x0
est juste0
écrit en notation hexadécimale. Il n'y a pas de différence entre les deux:NULL
est généralement#define
d pour0
quelque part et fait la même chose.Il n'y a pas de différence. En C, la valeur NULL est souvent définis comme
(void *)0
mais en C++, qui n'est pas autorisé. Quelques anciens compilateurs ai mal, mais ils sont vraiment à l'ancienne.De l'OMI, il est préférable d'utiliser la valeur NULL, il met en scène la intention plus clairement, et vous donne une belle, facile symbole de S&R lors de votre compilateur est mis à jour pour C++ 0x, qui comprendra
nullptr
.Par le façon, tout le monde,
0x0 est hexagonale, comme vous l'avez tous mentionné, mais
0 est Octale, décimale! 🙂
ie n'importe quel nombre de départ à 0 (et non suivie par x) est octal:
🙂
0x0
et0
représentent la même valeur, de sorte que vous pouvez utiliser celui qui convient le mieux à vos yeux. Quand nous arrivons à la C++0x, nous allons avoir le mot-clénullptr
pour représenter des pointeurs null.0x0 est juste une expression de la valeur 0 en hexadécimal. Je doute que le compilateur de soins à propos de la différence.
Pas de différence
À mon avis, 0 x 0 est la plus explicite.
Certaines personnes peuvent confondre 0 "0"(0x30 -Ive vu des cas).
Tout simplement, c'est une question de goût. Les gens aiment écrire des adresses de mémoire en hexa décimal, donc l'écriture de la valeur NULL comme 0x0 serait plus classique. Pour l'ordinaire, comme moi, 0 suffira.
Donc, ce site a une très bonne information sur la valeur NULL: http://c-faq.com/null/index.html
NULL est en fait le "pointeur null" - de sorte qu'il peut être de type, par exemple", (void*)0". Elle indique au compilateur que NULL n'est pas d'être traité comme un int, mais plutôt comme un "pointeur vers un int". Et en C, le compilateur va donner des avertissements/erreurs si les types ne correspondent pas.
La valeur "0" et "0x0" est l'équivalent en C++. Chaque fois qu'un numéro est préfixé par "0x", cela signifie que cette valeur est la représentation hexadécimale de ce nombre. Par exemple, 0 x 5 == 5.
Aussi, 0xA [en hexadécimal, en base 16) == 10 [en base 10].
modifier
Voici quelques sources. Dans la glibc, NULL semble être définie différemment selon les endroits. (pourquoi devrait-ce être?)
#define NULL ((void *)0) (stdlib/gmp-impl.h)
#define NULL 0 (posix/getopt1.c)
edit2
bien, on dirait que j'ai raté la marque sur celui-ci! désolé! (CW avait. n'hésitez pas à continuer downvoting!)