2 jh199106 jh199106 于 2014.11.18 17:55 提问

C++ 字符串 长度 指针

int main()
{
char const * pStr="the long string";
char const *p=pStr;
while(*p++);
cout<<(p-pStr)<<endl;
}

请问输出结果为什么是16,而不是15?

6个回答

caozhy
caozhy   Ds   Rxr 2014.11.18 18:05

因为*的优先级比++高,所以当p指向\0的时候还会执行一次空循环。

lx624909677
lx624909677   Ds   Rxr 2014.11.18 19:32

第15次执行完会执行下一次,也就是第16次,第16次位FALSE了,才跳出循环

91program
91program   Ds   Rxr 2014.11.18 18:17

因为你的 p 指针在执行完 NULL 判断后,又加了一,所以就多出来一个。

yangyuyu77584
yangyuyu77584   2014.11.18 22:59

主要的原因是i++与++i的区别,i++是先做其他后自加,而++i是先自加后再做其他。当十五次,wile判断的是p的最后一个,不为null,所以还在while循环中,但是这p已经指向pStr后地址,这次再来一次while判断,就是空的,但是p指针还会自己一次,所以他的指针就指向pStr后个第二个地址。所以得到的结果是16.

max_min_
max_min_   Rxr 2014.11.19 00:29

楼主为什么认为不是16 而是15呢?

eagleyan
eagleyan   Rxr 2014.12.01 08:00

while(*p++);
等于
while(*p)
p = p + 1;
p = p + 1;

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