如果我们将一个数组传递给函数,我们遍历它直到“p”是一个nullptr。但这绝不应该发生,因为数组中值为0的最后一个元素之后的地址不是nullptr(没有值为零)。这怎么可能?
int count_x(char* p, char x)
// count the number of occurrences of x in p[]
// p is assumed to point to a zero-ter minated array of char (or to nothing)
{
int count = 0;
while (p) {
if (*p==x)
++count;
++p;
}
return count;
}
答案 0 :(得分:7)
该功能无效。您的本书版本包含错误。正确的版本会在*p
条件下测试while
。
int count_x(char* p, char x)
// count the number of occurrences of x in p[]
// p is assumed to point to a zero-terminated array of char (or to nothing)
{
int count = 0;
while (*p) {
// ^----------------- You omitted this asterisk.
if (*p==x)
++count;
++p;
}
return count;
}
更新:代码显然在打印之间有所改变,the errata for the first printing提到了与此功能相关的错误。帽子提示@BenVoigt。
答案 1 :(得分:3)
代码错了。
while
条件需要
while(*p)
而不是
while(p)
编辑:也在勘误表中找到它 - http://www.stroustrup.com/Tour_printing2.html
第11-12页:count_if()的代码是错误的(没有按照它声称的那样做 to),但关于语言的观点是正确的。