在this question中,初始化器用于将指针设置为null。不使用0
值0L
而是使用值。我已经读过,对于空指针应该使用0
,因为精确的空指针表示是特定于实现的。
使用0L
设置指向null的指针会导致移植时出现问题吗?
答案 0 :(得分:16)
从标准(4.10.1):
空指针常量是一个整数 常数表达式(5.19)的左值 求值为零的整数类型
所以我猜0L
没问题。
答案 1 :(得分:13)
我认为0L
很好,除非它意味着你认为你指定的指针类型与长整数相同,所以有点令人困惑。
我认为使用NULL
要清楚得多。
答案 2 :(得分:4)
在C ++ 0x中,有一个名为nullptr
的新空指针常量nullptr_t
。它可以隐式转换为任何指针类型。
在那之前,我建议使用NULL,但是0和0L都可以用于我听过的每个实现。
答案 3 :(得分:3)
我不能给你一个确切的答案,但无论你的问题的确切答案是什么,只是用0L
初始化指针的想法本身是错误的,因为它表明指针是与long
相同的大小,当然不一定是真的。
编译器是否接受它,以及它是否安全,我不会这样做,因为它暗示了一个无效的想法。
答案 4 :(得分:2)
空指针表示是特定于实现的,但0和0L都不一定是该实现 - 它们只是用户可以指定空指针的方式,而且都可以。
我应该指出,Bjarne Stroustrup曾多次表示他的偏好是使用普通0(而不是NULL)。
答案 5 :(得分:2)
我不同意那些建议使用NULL的人,尽管三个陈述的选项中的任何一个确实可行。在惯用的C ++中,标准选择是0(也许是因为Stroustrup的偏好:http://www2.research.att.com/~bs/bs_faq2.html#null)。
0L将以与0相同的方式隐式地转换为适当的指针类型;它只是看起来有点奇怪,并没有真正理解Jesper给出的理由......
答案 6 :(得分:2)
您可以使用false
,0
,0l
,0L
,0ul
,0u
,00
或任何表示字面零的方法的数量。文字零基本上是一个神奇的符号,恰好也对应于空指针常量。
如果我们讨论的是一个恰好为零的值并且代码在指针上记忆它,那么我们就会遇到上面提到的问题。
额外问题:哪些类型的空指针常量不是按位零?
答案 7 :(得分:1)
我必须同意所有说NULL的人。对于那些喜欢使用0的人,我的观点是你的代码应该说出它意味着什么。你想要的结果是一个空指针,所以你的代码应该这样说。进行比较时更有意义:
if (some_variable == NULL) { ... }
比
更清晰if (some_variable == 0) { ... }
答案 8 :(得分:-2)
将0L(长整数(64位))分配给32位指针可能会导致问题。与上面提到的其他帖子一样,使用NULL将指针初始化为零。