我应该写“0x0”还是“0”而不是NULL?

时间:2009-11-19 17:42:29

标签: c++ null

我知道你应该在c ++中使用0而不是NULL(尽管大多数时候NULL在C ++中被定义为0

最近我遇到了一些使用0x0的代码。

有什么区别?

8 个答案:

答案 0 :(得分:27)

0x0仅以{十六进制表示法编写0。两者之间没有区别:

  

0 16 = 0 10 :)

NULL通常#define d到0某处并执行同样的操作。

答案 1 :(得分:17)

没有区别。在C中,NULL通常被定义为(void *)0,但在C ++中是不允许的。一些古老的编译器错了,但它们确实很古老。

IMO,最好使用NULL,因为它可以更清晰地描绘 intent ,并在编译器更新为C ++ 0x时为S& R提供一个漂亮,简单的符号,其中包括nullptr

答案 2 :(得分:6)

顺便说一句,大家,

0x0是十六进制,正如你所提到的那样,但是

0是八进制,而不是十进制! : - )

即任何以0开头(而不是后跟x)的数字都是八进制:

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

: - )

答案 3 :(得分:5)

0x00代表相同的值,因此您可以使用最适合您眼睛的值。当我们得到C ++ 0x时,我们将使用关键字nullptr来表示任何类型的空指针。

答案 4 :(得分:2)

0x0只是十六进制值0的表达式。我怀疑编译器会关心它的区别。

答案 5 :(得分:2)

没有区别

在我看来,0x0更明确。

有些人可能会混淆0和“0”(0x30 - 我已经看到它发生了)。

答案 6 :(得分:0)

简单地说,这是一个品味问题。人们喜欢用十六进制来写内存地址,所以将NULL写为0x0会更经典。对于像我这样的普通人来说,0就足够了。

答案 7 :(得分:-7)

所以,这个网站有一些非常好的关于NULL的信息:http://c-faq.com/null/index.html

NULL实际上是“空指针” - 因此它可能是类型,例如“(void *)0”。这告诉编译器NULL不被视为int,而是作为“指向int的指针”。在C中,如果类型不匹配,编译器将发出警告/错误。

值“0”和“0x0”在C ++中是等效的。只要数字以“0x”为前缀,就意味着该值是该数字的十六进制表示。例如,0x5 == 5.

另外,0xA [十六进制,基数为16] == 10 [基数为10]。

修改

以下是一些消息来源。在glibc中,NULL似乎在不同的地方定义不同。 (为什么会这样?)

#define NULL ((void *)0)(stdlib / gmp-impl.h)

#define NULL 0(posix / getopt1.c)

<强> EDIT2

好吧,看起来我错过了这个标记!抱歉! (CW'd。随时保持低调!)