前置递加与后置递加

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

  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 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值