2 u010150586 u010150586 于 2013.11.23 19:19 提问

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;
}

}

6个回答

u012938539
u012938539   2013.11.24 13:08

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

u010150586
u010150586 谢谢!
大约 4 年之前 回复
MOMODEJIANCHI
MOMODEJIANCHI   2013.11.26 23:30

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

u011687911
u011687911   2013.12.06 14:23

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

chenshunming
chenshunming   2013.11.23 22:46

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

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

u010150586
u010150586 谢谢
大约 4 年之前 回复
fylsle
fylsle   2013.11.26 19:10

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

haolong8986
haolong8986   2013.12.04 20:19

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!