我正在使用打印功能,我的原始代码就像
void print1(const char *cp)
{
while(cp)
{
if(*cp)
{
cout << *cp++ << " ";
}
}
}
它永远不会停止,直到我将其更改为
void print1(const char *cp)
{
if(cp)
{
while(*cp)
{
cout << *cp++ << " ";
}
}
}
我对这段代码有些困惑,实际上这是C ++ Primer中的代码。是否同时考虑了同一件事?但是为什么第一个不能停止?那是因为有一个指向最后位置的指针,但其中没有任何内容,而while永远是正确的,但永远不会进入if?
答案 0 :(得分:2)
在第一个示例中,循环一直运行到指针本身变为null为止(从来没有这样做)(相反,它最终增加到缓冲区的末尾,因此程序表现出未定义的行为)。
在第二个示例中,循环一直运行到所指向的字符变为零为止-一旦前进的指针到达以nul终止的字符串的末尾,它便会执行此操作。