2017-10-18 99 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

相關問題