2017-10-18 101 views
1

我正在定义一个函数,其中一个参数是const char **p。我明白它的意思是“将p声明为指向const char指针的指针”。现在我想检查const char是否为NULL字符,因此检查(**p == NULL),但它会给出警告warning: comparison between pointer and integer。这里的代码示例const char ** p指针和整数之间的比较if(** p == NULL)

bool func(const char **p) 
    { if (**p == NULL) 
      return false;} 

我不知道为什么它抱怨如此。不是** p应该解引用字符值指针* p指向?或者我在NULL'\0'之间混淆?

+0

是的,你是在混淆'NULL'和''\ 0''。 NULL在这种情况下是没有意义的。 – AnT

回答

4

NULL是一个宏定义了一个空指针常量,而不是ASCII字符NUL。如果你想测试一个字符NUL,则:

if(**p == '\0') 

或者更简单地说:

if(**p == 0) 
+0

'NULL'是一个空指针*常量*,它不一定是一个指针。它可以被定义为一个指针。 – AnT

+0

@Ant:一般来说是的,但在这个特定的问题中,NULL是一个指针 - 因此是错误,所以答案仍然有效。 – Clifford

+0

是的,但是语言本身对*空指针常量*和空指针*进行了非常明确的区分。这是两个完全不同的概念。出于这个原因,将NULL引用为*空指针*听起来颇具误导性。 – AnT

相关问题