在条件语句中使用NULL和'\ 0'是一样的吗?

时间:2014-10-07 14:59:10

标签: c++ visual-studio-2013 null

C ++中以下两个条件是否相同?他们都可以接受吗?我正在使用Visual Studio 2013 Express,我使用NULL。我的程序运行正常,但在我的作业等级上,它被计算在内,因为我使用的是NULL而不是'\ 0'。

 if (charArray[0] == NULL)
 if (charArray[0] == '\0')

4 个答案:

答案 0 :(得分:5)

NULL是一个null 指针常量。 charArray[0]可能不是指针。因此,您不应将其与NULL进行比较。

C ++标准说:

  

NULL是本国际标准(4.10)中实现定义的C ++空指针常量。

允许的定义包括但不限于00L,以及在C ++ 11中nullptr。如果NULL被定义为nullptr,则您的程序甚至无法编译。

在现代C ++中,如果想要零,则应使用0'\0'等文字;如果需要空指针,则应使用nullptr。不应该真正使用NULL

答案 1 :(得分:0)

在不知道您使用的语言(看起来像C / C ++)的情况下,很难肯定地说。

在C / C ++中,NULL通常使用#define语句在包含的头文件中定义。它通常被定义为0,但也许你的教练停靠了你的标记,因为它理论上可以被定义为其他东西?

此外,0和' \ 0'它们具有不同的类型,即使它们具有相同的二进制表示,这也可能是区分的原因。

答案 2 :(得分:0)

它将适用于该语言的旧标准版本(C ++ 98和C ++ 03),其中NULL的合法定义仅限于具有零值的整数常量表达式。但是在非指针上下文中使用NULL只会使代码更难阅读。 NULL只应保留给指针上下文。

C ++ 11为NULL的定义提供了更多可能性。 C ++ 11中NULL的一些法律定义甚至不会在整数上下文中编译。

换句话说,NULL永远不应该像在代码示例中一样使用它。

答案 3 :(得分:0)

'\0'是“空字符”。它是1个字节,值为0x00。

NULL是“空指针”。在32位机器上,它可能是4个字节,值为0x00000000。在64位机器上,它可能是8个字节,值为0x0000000000000000。 (与int一样,由编译器的编写者决定如何实现它,以及它的大小。)

因此,虽然两个版本的代码都返回相同的bool答案,但它们可以分配不同数量的内存,并调用不同的比较函数以执行此比较。 (如果关闭所有编译器优化,则保证是这种情况。如果打开编译器选项,智能编译器可能会将两个版本优化为相同的代码。)

就个人而言,我更喜欢在比较中使用相同的类型。所以我总是为== '\0'类型写char并为指针类型写== NULL