while(*s++=*t++)是什么意思? 为什么while(*s++=*t++)的作用是复制字符串

作者&投稿:贯厚 (若有异议请与网页底部的电邮联系)
这种代码在C里很常见的。while(*s++=*t++);先赋值,再把s和t都++

while(*s++=*t++); 在语义上等同于(注意条件部分是一个=,不是2个):

while((*t) != 0){
*s = *t;
s++;
t++;
}

显然前者更紧凑,效率(可能)更高。

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

说起来复杂,直接改写一个do-while循环就好理解了:do{*s=*t++;} while(*s++);

如果硬要解释原程序的话,那表示的是指针t所指向数组的元素赋值给s所指向数组,并且t指针和s指针向后移动一位。具体来说:

  1. 先将*t的值赋给等号左边,然后t指向地址往后面移动一位。

  2. 因为++自增运算表示的一些特殊性,s++表示的是s自增之前的地址,故*s++表示的还是原来的地址上的值(也就是原来的*s),这时候就会被赋值为*t(在t指针还没移动前的值)。

  3. while循环判断*s的值是否是0,不是0就进入循环,并且s指向位置后移。如果是0,出循环,s指向位置依然后移一位。

注意:不管这个while循环进不进入,s和t指向地址都会往后移动一位。



while(*s=*t)
{ s++;t++;}
while里的条件表达式是把指针t所指的值赋给指针S所指向的空间。如果这个值不为0,则继续执行while语句里面的程序,并且s指针和t指针加1.直到这个值为0时,跳出循环。

不断的将t字符串中的字符复制到s字符串中,直到t字符串结束,跳出while循环。
此时t已经指向字符串的最后面了。

非常危险的操作,那个指针都不知道指去哪了
while(*s++=*t++)相对于
while(*s=*t,*s)
{
s++;
t++;
}

C语言中while(*s++=*t++)等价于什么?~

因为, C它是. 如果s指向的变量为0, 那*s, 就是假.那么*s++=*t++就不会执行.

但是, while(*s++=*t++)它是先把t自加后的值(不清楚是先自加还是先取值), 然后赋给*s++, 那么*s的值就是*t++的值了, 所以while是否循环取决于*t++的值.
而while(*s)它明显是取决于*s

再看C,

do while是必然先执行的, 然后再判断是否继续循环, 所以这时*s++就等于*t++了

当定义了个 char*s,*t后,*S,*T就是相当于两个字符数组了。通过while循环自增,就可将字符数组T的值赋给字符数组S了。
希望你采用哦。。。。嘻嘻

was Einstein a Space Alien?阿尔伯特·爱因斯坦?
答:That didn't slow him down. Disdaining caution, Einstein adopted the intuitive leap as a basic tool. \hile not knowing the reason.\ 困惑并没有使爱因斯坦放慢探究的脚步。爱因斯坦不屑谨小慎微,他采用直觉跳跃思维作为基本工具...

有关母爱的英文句子
答:14t is at our mother’s knee, we acquire our noblest, most really Sincere and the most lofty ideals, but there is seldom any money.-- Mark Twain 就是在我们母亲的膝上,我们就获得了我们的最高尚、...

高考英语语法:高中英语语法-怎样写好英语段落(三)之一
答:spelling,hoever,cannot. Body language transmits ideas or thoughts by certain actions,either intentionally or unintentionally. A nod signifies approval,hile shaking the head indicates a negative reaction. Other ...

谁知道《live are we young》歌词?谢求!
答:and live whi le were young. 今晚让我们玩吧,让我们趁年轻活 着 [Zayn] Hey girl it's now or never, it's now or never. 嘿妞就现在要不永远不要 Don't over-think just let it go. 别多想啦别管其它的...

Easy As 1-2-3 歌词
答:I ain't gonna feed your ego on the time Because you are so much more than looks and priety smile and girl that's just my style I know it's been a hile But I'll let you know Baby girl the ...

数据库查询语句
答:数据库查询语句需要根据不同的需求进行编写。(以MySQL数据库查询为例)1、如果需要查询某个数据表的所有字段,则使用 * 代表所有字段进行查询即可。该种方式是最简单的一种查询。2、若需要查询某表的某些字段,则在select后...

很霸气的英文句子超级高大上
答:16、Stop playing the fool. / Don't act stupid.别装傻了 17、Put up or shut up.要么你就去做不然就给我闭嘴。18、Do something about it / Dont just sit there.想想办法吧!别闲坐着!19、That's going too ...

河北牌照用哪些字母
答:冀A 石家庄,冀B 唐山,冀C 秦皇岛,冀D 邯郸, 冀E 邢台,冀F 保定,冀G 张家口,冀H 承德,冀J 沧州,冀R 廊坊,冀T 衡水 保定“冀F”之后,第一位用英文字线区别不同区域车辆。其中全是数字号段及“A”字 头的为...

爱英思坦的相对论的历史意义
答:相对论是关于时空和引力的基本理论,主要由阿尔伯特·爱因斯坦创立,依据研究的对象不同分为狭义相对论和广义相对论。相对论的基本假设是相对性原理,即物理定律与参照系的选择无关。狭义相对论和广义相对的区别是,前者讨论的是...

母亲节英语手抄报内容简单
答:a mother ’s voice is the most beautiful sound in the world! 女人固然是脆弱的,母亲却是坚强的。 hile women are vulnerable, the mother is strong。 妈妈你在哪儿,哪儿就是最快乐的地方。 mama where are you, where is ...