C ++中以下两个条件是否相同?他们都可以接受吗?我正在使用Visual Studio 2013 Express,我使用NULL。我的程序运行正常,但在我的作业等级上,它被计算在内,因为我使用的是NULL而不是'\ 0'。
if (charArray[0] == NULL)
if (charArray[0] == '\0')
答案 0 :(得分:5)
NULL
是一个null 指针常量。 charArray[0]
可能不是指针。因此,您不应将其与NULL
进行比较。
C ++标准说:
宏
NULL
是本国际标准(4.10)中实现定义的C ++空指针常量。
允许的定义包括但不限于0
,0L
,以及在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
。