C ++中的while(aPointer)和if(aPointer)有什么区别?

时间:2019-02-24 15:46:03

标签: c++ arraylist

我正在使用打印功能,我的原始代码就像

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?

1 个答案:

答案 0 :(得分:2)

在第一个示例中,循环一直运行到指针本身变为null为止(从来没有这样做)(相反,它最终增加到缓冲区的末尾,因此程序表现出未定义的行为)。

在第二个示例中,循环一直运行到所指向的字符变为零为止-一旦前进的指针到达以nul终止的字符串的末尾,它便会执行此操作。