Vraag In plaats van NULL, zou ik `0x0` of` 0` moeten schrijven?


Ik weet dat je hoort te gebruiken 0 in plaats van NULL in c ++ (hoewel NULL is gedefinieerd als 0 in C ++ het grootste deel van de tijd).

Onlangs kwam ik wat code tegen waar 0x0 werd in plaats daarvan gebruikt.

Wat is het verschil?


11
2017-11-19 17:42


oorsprong


antwoorden:


0x0 is gewoon 0 geschreven in hexadecimale notatie. Er is geen verschil tussen de twee:

016 = 010 :)

NULL is gewoonlijk #defined tot 0 ergens en doet hetzelfde.


26
2017-11-19 17:43



Er is geen verschil. In C wordt NULL vaak gedefinieerd als (void *)0, maar in C ++ is dat niet toegestaan. Een paar oude compilers hebben dit fout gedaan, maar ze zijn echt oud.

IMO, het is beter om NULL te gebruiken, omdat het de afbeelding is voornemen duidelijker, en geeft je een leuk, gemakkelijk symbool voor S & R wanneer je compiler wordt bijgewerkt naar C ++ 0x, die zal bevatten nullptr.


17
2017-11-19 17:49



Trouwens, iedereen,

0x0 is hex, zoals je al hebt genoemd, maar

0 is Octaal, geen decimaal! :-)

dat wil zeggen dat elk nummer beginnend met 0 (en niet gevolgd door x) octaal is:

0 = 0
01 = 1
02 = 2
...
07 = 7
010 = 8
011 = 9
012 = 10
...

:-)


6
2017-11-19 18:37



0x0 en 0 vertegenwoordig dezelfde waarde, zodat u degene kunt gebruiken die het beste bij uw oog past. Wanneer we C ++ 0x krijgen, hebben we het sleutelwoord nullptr om nul-pointers van elk type te vertegenwoordigen.


5
2017-11-19 17:48



0x0 is slechts een uitdrukking van de waarde 0 in hexadecimaal. Ik betwijfel of de compiler voor het verschil zal zorgen.


2
2017-11-19 17:44



Geen verschil

Naar mijn mening is 0x0 explicieter.

Sommige mensen kunnen 0 verwarren met "0" (0x30 - ik heb het gezien).


2
2017-11-19 17:44



Simpel gezegd, het is een kwestie van smaak. Mensen schrijven geheugenadressen graag in hexa-decimalen, dus het schrijven van NULL als 0x0 zou meer klassiek zijn. Voor gewone mensen zoals ik zal 0 volstaan.


0
2017-11-19 18:25



Dus, deze site heeft heel goede informatie over NULL: http://c-faq.com/null/index.html

NULL is eigenlijk de "nul-wijzer" - dus het kan van het type zijn, bijvoorbeeld "(ongeldig *) 0". Dit vertelt de compiler dat NULL niet moet worden behandeld als een int, maar eerder als een "aanwijzer naar een int". En in C geeft de compiler waarschuwingen / fouten als de typen niet overeenkomen.

De waarden "0" en "0x0" zijn equivalent in C ++. Telkens wanneer een nummer wordt voorafgegaan door "0x" betekent dit dat die waarde de hexadecimale weergave van dat getal is. Bijvoorbeeld 0x5 == 5.

Ook 0xA [in hexadecimaal, basis 16) == 10 [in basis 10].

Bewerk

Hier zijn enkele bronnen. In glibc lijkt NULL op verschillende plaatsen anders te zijn gedefinieerd. (waarom zou dit zijn?)

#define NULL ((ongeldig *) 0) (Stdlib / GMP-impl.h)

#define NULL 0 (Posix / getopt1.c)

edit2

wel, het lijkt erop dat ik het merkteken op deze gemist heb! Sorry! (CW'd. Voel je vrij om te blijven stemmen!)


-7