C++的一个细节问题:

来源:百度知道 编辑:UC知道 时间:2024/06/02 14:35:46
这是一个讲字符串s1和s2,拼接后存于s1输出;
其中,那个while(*p++)是由指针确定s1中'\0'的位置,但为什么下面还有句--p呢?直接从'\0'处开始取缔不是可以了吗?
#include "iostream.h"
char *strcat1(char *s1,char *s2)
{
char *p=s1;
while(*p++);
--p;
while(*p++=*s2++);
return(s1);
}
void main()
{
char *p1,*p2;
p1=new char[40];
p2=new char[20];
cin>>p1>>p2;
cout<<"拼接后:"<<strcat1(p1,p2)<<endl;
delete []p1;
delete []p2;
}

*p++是先取p处的值,再将p向后移一个单位,因此当循环停止时,p已经移到'\0'的后一位了.

*p++是先返回*p再++
要是不想--p的话,改成++*p好了,
++*p是先++再返回(*p+1)

个人理解是:
while(*p++);
当*p='/0'时,虽退出了循环,但又做了一次++
所以*p指向了'/0'的下一位
因此要--p