偶然在网上看到一道题,但是好像回答者并没有讲明白,研究一下好像是这么个原理,顺便记录下来
1 #include<iostream>
2 using namespace std;
3 int main(){
4 char str1[10]="abc",str2[10]="ABC";
5 char *p1=str1,*p2=str2;
6 while(*++p1);//如果是前置就会得到abcABC
7 // while(*p1++);//后置abc
8 /*由于*p1++ 是先递加,后取值,但是递加是后置的,所以取到的值依然是递加之前的值,所以当取到'\0'结束标志时,p1已经指向第二个结束标志了。*/
9
10
11 /*str1[]开始是这样的: {‘a','b','c',\0,\0,\0,\0,\0,\0,\0}
12 p1一开始是指向str1的第一个字母'a'的,经过 while(*p1++);之后,p1是指向了第5个(注意不是第4个)字符 \0,此时
13 再执行 while(*p1++=*p2++),结果是str1变成了这样:{‘a','b','c',\0,‘A’,‘B','c',\0,\0,\0} 此时输出str1,因为第4个字符是\0,字符串到此结束,所以只
14 输出前三个字母abc,而不是abcABC.*/
15
16 while(*p1++=*p2++);
17 cout<<str1<<endl;
18 return 0;
19 }
1 #include<iostream>
2 using namespace std;
3 int main(){
4 char str1[10]="abc",str2[10]="ABC";
5 char *p1=str1,*p2=str2;
6 while(*p1!='\0')//等价于while(*p1)
7 p1++;//*p1++结果也是一样的
8 while(*p1++=*p2++)//结果为abcABC;
9 cout<<str1<<endl;
10 return 0;
11 }
12