我想知道是否有人可以总结以下编写涉及指针的条件语句的方式之间的差异:
if(p)
if(p != 0)
if(p != NULL)
在以下情况下,我常常感到困惑(必须有更多情况,请补充您的情况):
static char *p1;
char *p2 = new char();
const char *p3 = "hello"; /*then I repeatedly do p3++*/
char *p4 = 0;
char *p5 = NULL;
编辑
另外,我想知道,对于
char *p
,在while循环中的某些while(*p)
之后,我们是否有while(*p!=0)
或while(p)
,可能等效于while(p!=0)
或while(p!=NULL)
或while(*p!='\0')
或p++
(或其他?)? 最佳答案
if(p)
在这种情况下,
p
转换为bool
,实际上与p != 0
相同。if(p!=0)
这是检查空指针的显式方法,与前一种方法相同。
if(p != NULL)
与此不同的是
NULL
是宏。在C中被定义为(void*)0
,而在C++中被定义为0
。同样,它与前两个表达式的检查相同。基本上,它们都做相同的事情(除了未定义
NULL
宏或未将其重新定义为其他内容)。我倾向于使用p != 0
,因为它与p
相同,但其内容明确。使用NULL
的版本需要包含stddef
或cstddef
,通常这不是问题。在C++ 11中,有一种检查空指针的新方法:
nullptr
,它是一个新关键字。如果有可用的话,它将是理想的选择,因为它清楚地表明p
是一个指针:if( p != nullptr )
关于c++ - 使用指针编写条件的几种方式之间的差异,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7761812/