我知道在比较char指针和一些char值时你需要在指针前加上*
,但我在一些代码中找到了一个比较:
char* c;
// ...
while (*c != ']' && *c != '\0') // search for some character
{
c++;
}
if (c == '\0')
{
return -1; // error
}
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是:这是一个错误还是一个特例?不应该if (*c == '\0')
有吗?
空指针
整数常量字面值0具有不同的含义,具体取决于使用它的上下文.在所有情况下,它仍然是一个值为0的整数常量,它只是以不同的方式描述.
如果将指针与常量字面值0进行比较,则检查指针是否为空指针.然后将该0称为空指针常量.C标准定义0转换为void*类型既是空指针又是空指针常量.
此外,为了帮助提高可读性,头文件中提供了宏NULL stddef.h
.
因此,这里有一些检查空指针的有效方法:
if (pointer == NULL)
NULL
被定义为比较等于空指针.实现定义了NULL的实际定义,只要它是有效的空指针常量.
if (pointer == 0)
0是空指针常量的另一种表示.
空字符
'\0'
被定义为空字符 - 这是一个所有位都设置为零的字符.这与指针无关.但是,您可能会看到类似于此代码的内容:
if (!*string_pointer)
检查字符串指针是否指向空字符
if (*string_pointer)
检查字符串指针是否指向非空字符.
所以,我的问题是:这是一个错误还是一个特例?不应该有(*c =='\ 0')吗?
代码中的语句if (c == '\0')
检查指针本身是否等于0.也就是说,它检查c是否为空指针.但我认为这是一个错误,因为检查c是否为NULL
指针的语句是在访问存储在c的值之后.我认为该程序即将找到一个角色]
.如果它]
在空字符之前找到该字符,则它不返回-1.因此,更正后的陈述应为─
if (*c == '\0')
{
return -1; // It didn't found the '[' character!
}
Run Code Online (Sandbox Code Playgroud)