CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
【经验总结】不能实施并行处理的情况 浅谈并行编程中的任务分解模式
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  非技术区

while(*s++=*t++);是什么意思

楼主zhmh326(川添拓海)2005-05-12 20:16:17 在 C/C++ / 非技术区 提问

这期的《程序员》里有这么一句话:“如果你不能解释为什么‘while(*s++=*t++);’的意思是进行字符串拷贝,那么你就是在对编程一窍不通的状态下编程”。看完以后把小弟吓了一跳,我真的是很不明白,这句话跟字符串拷贝有什么关系?为什么在判断条件里面用赋值呢?循环体怎么是空的?哪位高手帮忙指点指点。小弟先谢过了。 问题点数:10、回复次数:15Top

1 楼yegaofei(踏雪而歌)回复于 2005-05-12 20:56:51 得分 2

跟字符串拷贝有什么关系?     如果s和t是字符指针的就会有关系了  
  为什么在判断条件里面用赋值呢?   C语言的特色呀,紧凑  
  循环体怎么是空的?字符串拷贝呀,目的已经达到了,所以是空的  
  Top

2 楼jiangbo1125(江小鱼)回复于 2005-05-12 21:03:14 得分 0

你是不是看错了呀。不要断章取意。这怎么可能实现呢?Top

3 楼boxban(冻酸梨)回复于 2005-05-12 22:06:55 得分 2

yegaofei(踏雪而歌)   解释的不错!  
   
  while(*s++=*t++);   在语义上等同于(注意条件部分是一个=,不是2个):  
   
  while((*t)   !=   0){  
          *s   =   *t;  
          s++;  
          t++;  
  }  
   
  显然前者更紧凑,效率(可能)更高。  
  Top

4 楼zhousqy(标准C匪徒)(甩拉,甩拉)回复于 2005-05-12 23:03:32 得分 2

这种代码在C里很常见的。while(*s++=*t++);先赋值,再把s和t都++Top

5 楼arrowcy(长弓手)回复于 2005-05-12 23:58:41 得分 2

这种代码在C里很常见的。while(*s++=*t++);先赋值,再把s和t都++  
  ++之前,赋值之后还要计算整个表达式的值,也就是是否遇到了'\0'Top

6 楼xjp6688(大平/要做必须最好)回复于 2005-05-13 07:12:48 得分 0

大家都说了Top

7 楼qfeng_zhao(鱼儿鱼儿满天飞)回复于 2005-05-13 08:50:47 得分 0

up,都说了Top

8 楼djfu(飞龙在天)回复于 2005-05-13 08:59:22 得分 0

高效、简洁的字符串拷贝。Top

9 楼lucymary1982()回复于 2005-05-13 09:02:17 得分 0

很经典的写法,高手都懂得,中等程度的也该懂哈Top

10 楼lidelu(animator)回复于 2005-05-13 09:04:52 得分 2

arrowcy(长弓手)把流程解释得很清楚了  
  我帮你再通俗说一遍:  
   
  while(*s++=*t++);   这个在程序员杂志中,可能先声明了s和t都是字符串指针吧  
  在执行的时候,实现了好几个逻辑,步骤如下:  
  ⑴   *t   的赋值给   *s  
  ⑵判断   *s   是否为真。如果为假,则跳出循环;否则继续执行第⑶步。因为字符串是以\0结尾的,遇到\0的时候,也就是*s为假,就跳出了字符串拷贝。  
  ⑶   s   和   t   加   1,指向下一个地址,准备拷贝下一个字符。Top

11 楼bzCpp(csdn总技术值班室之饼子堂)回复于 2005-05-13 09:18:27 得分 0

回复人:   boxban(冻酸梨)   (   )   信誉:100     2005-05-12   22:06:00     得分:   0      
     
     
        yegaofei(踏雪而歌)   解释的不错!  
   
  while(*s++=*t++);   在语义上等同于(注意条件部分是一个=,不是2个):  
   
  while((*t)   !=   0){  
          *s   =   *t;  
          s++;  
          t++;  
  }  
   
  显然前者更紧凑,效率(可能)更高。  
   
  --------------------------------------------------------------------  
   
  不对哦,这样没有拷贝   \0.  
   
  Top

12 楼xnlcx(J2EE.Net)回复于 2005-05-13 09:29:07 得分 0

在老潭的那本C程序设计里  
  关于字符串复制  
  就有这个while   (*s++   =   *t++);    
   
  紧凑简洁Top

13 楼hanzikey(紫奇)回复于 2005-05-13 09:45:57 得分 0

楼主要是不提问,我还真是没有怎么注意过这个问题!  
  谢谢了   :)Top

14 楼liangrh7()回复于 2005-05-13 09:55:06 得分 0

其实这样写并不好,让人难理解。  
   
  换这样写就会更清晰了:  
   
  while(   (*s++   =   *t++)   !=   ‘\0’   )    
      NULL   ;Top

15 楼zhmh326(川添拓海)回复于 2005-05-15 18:26:04 得分 0

谢谢高手们的指点。Top

相关问题

  • 什么意思
  • 什么意思?
  • _T什么意思
  • 什么意思
  • “::“什么意思?
  • 什么意思?
  • 什么意思!!!》》》》
  • <(.+?)>什么意思?
  • “<<”什么意思?
  • & 是什么意思?

关键词

  • 拷贝
  • 字符串
  • 赋值
  • 紧凑
  • 解释
  • 判断
  • 条件
  • 注意
  • 关系
  • 就是

得分解答快速导航

  • 帖主:zhmh326
  • yegaofei
  • boxban
  • zhousqy
  • arrowcy
  • lidelu

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
惹火投票。。火热进行中...
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
CSDN网站24小时值班电话:13552009689
Copyright © 2000-2009, CSDN.NET, All Rights Reserved
GongshangLogo