社区
非技术区
帖子详情
while(*s++=*t++);是什么意思
swanmy
2005-05-12 08:16:17
这期的《程序员》里有这么一句话:“如果你不能解释为什么‘while(*s++=*t++);’的意思是进行字符串拷贝,那么你就是在对编程一窍不通的状态下编程”。看完以后把小弟吓了一跳,我真的是很不明白,这句话跟字符串拷贝有什么关系?为什么在判断条件里面用赋值呢?循环体怎么是空的?哪位高手帮忙指点指点。小弟先谢过了。
...全文
1210
15
打赏
收藏
while(*s++=*t++);是什么意思
这期的《程序员》里有这么一句话:“如果你不能解释为什么‘while(*s++=*t++);’的意思是进行字符串拷贝,那么你就是在对编程一窍不通的状态下编程”。看完以后把小弟吓了一跳,我真的是很不明白,这句话跟字符串拷贝有什么关系?为什么在判断条件里面用赋值呢?循环体怎么是空的?哪位高手帮忙指点指点。小弟先谢过了。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
swanmy
2005-05-15
打赏
举报
回复
谢谢高手们的指点。
liangrh7
2005-05-13
打赏
举报
回复
其实这样写并不好,让人难理解。
换这样写就会更清晰了:
while( (*s++ = *t++) != ‘\0’ )
NULL ;
hanzikey
2005-05-13
打赏
举报
回复
楼主要是不提问,我还真是没有怎么注意过这个问题!
谢谢了 :)
xnlcx
2005-05-13
打赏
举报
回复
在老潭的那本C程序设计里
关于字符串复制
就有这个while (*s++ = *t++);
紧凑简洁
bzCpp
2005-05-13
打赏
举报
回复
1
回复人: boxban(冻酸梨) ( ) 信誉:100 2005-05-12 22:06:00 得分: 0
yegaofei(踏雪而歌) 解释的不错!
while(*s++=*t++); 在语义上等同于(注意条件部分是一个=,不是2个):
while((*t) != 0){
*s = *t;
s++;
t++;
}
显然前者更紧凑,效率(可能)更高。
--------------------------------------------------------------------
不对哦,这样没有拷贝 \0.
lidelu
2005-05-13
打赏
举报
回复
arrowcy(长弓手)把流程解释得很清楚了
我帮你再通俗说一遍:
while(*s++=*t++); 这个在程序员杂志中,可能先声明了s和t都是字符串指针吧
在执行的时候,实现了好几个逻辑,步骤如下:
⑴ *t 的赋值给 *s
⑵判断 *s 是否为真。如果为假,则跳出循环;否则继续执行第⑶步。因为字符串是以\0结尾的,遇到\0的时候,也就是*s为假,就跳出了字符串拷贝。
⑶ s 和 t 加 1,指向下一个地址,准备拷贝下一个字符。
lucymary1982
2005-05-13
打赏
举报
回复
很经典的写法,高手都懂得,中等程度的也该懂哈
djfu
2005-05-13
打赏
举报
回复
高效、简洁的字符串拷贝。
qfeng_zhao
2005-05-13
打赏
举报
回复
up,都说了
xjp6688
2005-05-13
打赏
举报
回复
大家都说了
arrowcy
2005-05-12
打赏
举报
回复
这种代码在C里很常见的。while(*s++=*t++);先赋值,再把s和t都++
++之前,赋值之后还要计算整个表达式的值,也就是是否遇到了'\0'
zhousqy
2005-05-12
打赏
举报
回复
这种代码在C里很常见的。while(*s++=*t++);先赋值,再把s和t都++
boxban
2005-05-12
打赏
举报
回复
yegaofei(踏雪而歌) 解释的不错!
while(*s++=*t++); 在语义上等同于(注意条件部分是一个=,不是2个):
while((*t) != 0){
*s = *t;
s++;
t++;
}
显然前者更紧凑,效率(可能)更高。
jiangbo1125
2005-05-12
打赏
举报
回复
你是不是看错了呀。不要断章取意。这怎么可能实现呢?
yegaofei
2005-05-12
打赏
举报
回复
跟字符串拷贝有什么关系? 如果s和t是字符指针的就会有关系了
为什么在判断条件里面用赋值呢? C语言的特色呀,紧凑
循环体怎么是空的?字符串拷贝呀,目的已经达到了,所以是空的
青少儿NOIP信息学奥赛通关必备-C
++
语法-循环-while循环
本课程为零基础C
++
语法专题课,是青少儿参加信息学奥赛NOIP通关必备-语法专题课;2、本课程每节课均配有练习题以及真题,以锻炼孩子的解题能力;3、本课程是基于小学生的认知发展水平开发的,运用孩子生活中常见的例子来阐述编程知识,让孩子听得懂学得会;4、学完本课程后,孩子可以自主编程,解决竞赛中,生活实际问题,5、拓展孩子计算思维,应对人工智能时代的挑战。6、本课程介绍的是程序的循环结构-while循环的知识
c语言字符串复制while,为什么while (*s
++
= *t
++
);这句代码的作用是复制字符串?...
1、为什么while (*s
++
= *t
++
);这句代码的作用是复制字符串? 测试代码如上,可以这么理解:1)、a = *t
++
;表示a = *t;接着
++
t;同理,*s
++
= a;表示*s = a;之后
++
s;所以*s
++
= *t
++
;等价于,a = *t;
++
t;*s = a;
++
s;所以上面的语句每执行一次,便把当前*t的值赋给*s,接着地址t和s前移一位。因此利用while循环即可...
while(*s
++
=*t
++
)
一、 while(*s
++
=*t
++
); 二、 while((*t) != 0){ *s = *t; s
++
; t
++
; }
从内存与汇编的角度理解C语言指针第06篇:为什么 while (*s
++
= *t
++
) 的作用是复制字符串?【视频解析】
这篇文章《7 suggestions for Computer Majors(给计算机专业的7条建议)》中诞生了while (*s
++
= *t
++
)这行大名鼎鼎的代码,相关的中文意思是说:只要你不能解释为什么while (*s
++
= *t
++
)的作用是复制字符串,那你就是在盲目无知的情况下编程。
C语言while(*s
++
=*t
++
)
while(*s
++
=*t
++
); 在语义上等同于(注意条件部分是一个=,不是2个): while((*t) != 0){ *s = *t; s
++
; t
++
; }
非技术区
15,440
社区成员
58,167
社区内容
发帖
与我相关
我的任务
非技术区
C/C++ 非技术区
复制链接
扫一扫
分享
社区描述
C/C++ 非技术区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章