#include <iostream>
using namespace std;
int main()
{
char str1[]= "I love China !",str2[5],*p1,*p2;
p1=str1;
p2=str2;
for(; *p1!= '\0'; p1++,p2++)
p2=p1;
*p2='\0';
p1=str1;
p2=str2;
cout << p1 << endl <<p2;
return 0;
}
#include <iostream>
using namespace std;
int main()
{
char str1[]= "I love China !",str2[5],*p1,*p2;
p1=str1;
p2=str2;
for(; *p1!= '\0'; p1++,p2++)
*p2=*p1;
*p2='\0';
p1=str1;
p2=str2;
cout << p1 << endl <<p2;
return 0;
}
这两个的区别是什么啊,
区别就循环体一句:
p2=p1;//传值引用,原值保留,仅操作形参的一个复本。
*p2=*p1;/传地址(或引用),直接操作指针,直接完成对实参的操作,
错误自己找。
p2 = p1; 是指针赋值,进行这样的赋值后 p2 == p1
*p2 = *p1; 是把指针把指向的值赋给 p2 指针所指向值,赋值后 p2 != p1
p2 = p1; 指针p1的地址赋值p2
*p2 = *p1; p1的值赋给p2
第一个中的str2始终没有变化,一直为空
第二个中的str2被赋值后等于str1