一个c++程序的问题?


#include<iostream>
#include<string>
#include<cstring>
using namespace std;
int main(){
   char str1[101];
   char str2[101];
   char *p1=str1;
   char *p2=str2;
   gets(str1);
   gets(str2);
   while(*p1!='\0'){
       p1++;
   }
   while(*p2!='\0'){
       *p1=*p2;
       p1++;
       p2++;
   }
   *p1='\0';
   puts(str1);
   return 0;
} 

请解析一下程序是什么?
特别是第二个while内的语句不懂

1 定义两个字符串数组
2 申明两个指针,指针指向字符串数组的首元素地址
3 在循环中,将第一个指针指向的字符串数组里的元素一个一个地复制到另一个指针指向的字符串数组
4 完成整个数组的复制
5 若有问题,欢迎纠正

通过指针把str2字符串复制到str1.

指针p1,p2分别指向数组str1,str2(即它们的首地址)
第一个while 将指针p1移至数组str1最后一个元素,第二个while将str2的元素接到str1。综上,这个程序就是将一串字符接到另一串字符后

代码将字符串str1 str2 合并到str1,str2接在str1的尾部。

while(*p2!='\0'){ //==> str2[i] != '\0' ,直到str2的结束
*p1=*p2; //==> str1[j] = str2[i]
p1++; //==> j++
p2++; //==> i++
}
*p1='\0'; //==> str1[j] = '\0'