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

 我来答
singlemuse
推荐于2017-10-13 · TA获得超过548个赞
知道小有建树答主
回答量:797
采纳率:0%
帮助的人:530万
展开全部
这种代码在C里很常见的。while(*s++=*t++);先赋值,再把s和t都++

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

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

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

如果s和t是字符指针的话,就是字符串拷贝
为什么在判断条件里面用赋值呢? C语言的特色呀,紧凑
循环体怎么是空的?字符串拷贝呀,目的已经达到了,所以是空的
1203982536jack
2019-11-25
知道答主
回答量:4
采纳率:0%
帮助的人:4079
展开全部

说起来复杂,直接改写一个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指向地址都会往后移动一位。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友e3afcb4
2009-09-15 · TA获得超过251个赞
知道小有建树答主
回答量:278
采纳率:0%
帮助的人:187万
展开全部
while(*s=*t)
{ s++;t++;}
while里的条件表达式是把指针t所指的值赋给指针S所指向的空间。如果这个值不为0,则继续执行while语句里面的程序,并且s指针和t指针加1.直到这个值为0时,跳出循环。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zwnewton
2009-09-15 · TA获得超过173个赞
知道答主
回答量:135
采纳率:0%
帮助的人:102万
展开全部
不断的将t字符串中的字符复制到s字符串中,直到t字符串结束,跳出while循环。
此时t已经指向字符串的最后面了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Tian·Ccb12
2009-09-17 · TA获得超过389个赞
知道小有建树答主
回答量:535
采纳率:0%
帮助的人:614万
展开全部
非常危险的操作,那个指针都不知道指去哪了
while(*s++=*t++)相对于
while(*s=*t,*s)
{
s++;
t++;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式