C++指针(为什么while条件中*cp正确,cp就出错,二者的区别!虚心请教!谢谢!)

#include
using namespace std;
void main()
{

const char *cp="hello!";
int cnt=0;
while(cp)
{
    ++cnt;++cp;
    cout<<cnt<<endl;
    cout<<*cp<<endl;
    cout<<(*cp)<<endl;
}

}

while(cp)
cp的值不为0就会一直循环

while(*cp)
*cp的值为字符串末尾时为'\0',ASII码值为0,就会停止循环。

在定义变量以外地方,指针变量前加*,代表的是该指针所指向的储存单元内储存的内容,不加*,则代表该指针所指向的储存单元的编号.

楼主的 cp 值肯定永远不会为 0 一直执行 ++操作,很快就会发生非法的内存操作鸟

由主函数内第一行代码知cp 是指向字符串的指针,cp的值为它所指向变量的地址,一般不为零,while(cp)会导致死循环;而while (*cp)是指判断字符串是否为空和已经到达字符串末尾,*cp指字符串中某位的值~

while(cp)应为while(*cp)。
另外不知道你要实现的功能是不是输出字符串的每个字符,是的话 ++cp; 应在输出后进行,即放在
cout<<(*cp)<<endl;
后面。

CP一个指针变量,里面装的是*CP对象的内存地址,怎么能作为循环判断条件