2 回答
TA贡献883条经验 获得超454个赞
from和to是char指针,*from解引用后就成了char。
在传参数时传入from的是"abcd"这个字符串,所以from指向的是这串字符中的第一个a,那*from就是a这个字符,所以cout输出a。
也因为from是指向字符的指针,所以cout会按照字符串来输出from,这样第二个cout就输出了abcd。
to和*to是同样的道理。
tmpfrom 和 tmpto 没什么特别的,就是把from和to指针复制了一份,用这个两个指针的副本在while中操作。while的条件判断表达式是一种常见的复制字符串写法。具体解释如下:取地址*和自增++是右结合的,所以*tmpfrom++会先进行后置自增,这里又用到了后置自增的特点:先取tmpfrom的当前值,再将tmpfrom自增(也就是指向后面的字符),这样就取出了tmpfrom当前的指向,解引用后得到当前所指的字符,且在表达式结束后tmpfrom也会指向下一个字符。等号前面的to也是同样的道理。于是每次while进入判断时就将tmpfrom所指的字符复制到了tmpto所指的位置,而下一次判断前这两个指针又都指向了下一个位置,这样循环复制,直到又一次while开始时,from指向了它字符串最后的'\0',将这个'\0'复制给*tmpto后——你要知道,赋值表达式的值就是等号左面的值——所以这一次整个*tmpto++=*tmpfrom++表达式为'\0',在判断中会被视为false,故while循环结束,同时也就完成了字符串的复制。这种写法不需要在while的循环体中写代码,只用条件判断表达式就能完成任务。
所以这里其实不用复制一份指针,直接在while中用from和to也是可以的。只不过在while结束后,from和to就指到了两个字符串的末尾的后一位,这样就不能用from和to来输出了。所以例子中将它们俩复制了一份。
- 2 回答
- 0 关注
- 1350 浏览
添加回答
举报