前置递加与后置递加

来源:互联网 发布:天人网络电视安卓版 编辑:程序博客网 时间:2024/06/05 09:10

偶然在网上看到一道题,但是好像回答者并没有讲明白,研究一下好像是这么个原理,顺便记录下来

  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 
原创粉丝点击