这个c++的程序看不懂 请教高手

来源:百度知道 编辑:UC知道 时间:2024/09/23 18:33:55
#includes<iostream.h>
char *f(char*s1,char *s2)
{
char *p,*p1;
int n=0;
while(*(s1+n)) n++;
char *buf=new char[n+1];
p=buf;p1=s1;
while(*p++=*p1++);
p=s1;p1=s2;
while(*p++=*p1++);
cout<<buf<<endl;
p--;p1=buf;
while(*p++=*p1++);
delete []buf;
return s1;
}
void main(){
char s1[30]="about",s2[]="time";
cout<<f(s1,s2)<<endl;
}
第一行是about,第二行是timeabout,

授人以鱼,不如授人以渔...

像这种比较简短的程序,要想弄懂它,直接看有困难的话,就用断点来看,自己分析每一句代码执行后,程序各数据成员的变化。

方法:
把光标放在要注意的代码行,按F9,行首会出现一个红点(这就是断点,程序运行的时候,运行到断点处就会暂停,这时候你可以看程序左下角一个框中显示的数据成员的值,红色表示上一条语句的新值。)如果不会,可以把每一行都设置成断点。然后按F5运行,每运行一步你就可以观察数据的变化,理清思路,当程序执行得差不多的时候你就会明白的。

这是一个很好的方法,在自己调试程序的时候,有难理解的这样很容易弄懂

这里我给你稍弄了一下:
#include<iostream.h>
char *f(char*s1,char *s2)//定义了一个返回值为指针的函数,返回的是地址,其实就是s1
{
char *p,*p1;
int n=0;
while(*(s1+n)) n++;//统计s1的长度,即n
char *buf=new char[n+1];//给buf分配n+1的空间
p=buf;p1=s1;
while(*p++=*p1++);//*p1++的值赋给*p++,其实就是把s1里面的东西拷贝到p里面
p=s1;p1=s2;//下面的语句和上面类似,把s2里面的东西拷贝到p里面,但s1、s2里面的东西没有受到影响
while(*p++=*p1++);
cout<<buf<<endl;//输出buf,就是以前s1里面的值
p--;p1=buf;
while(*p++=*p1++);//p已经指向了s1,p1指向了s2,这里是把s2拼接到s1里面
delete []buf;//释放buf的空间
return s1;//返回拼装后的s1
}
void main(){
char s1[30]="about",s2[]="time";
cout<<f(s1,s2)&