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

2025-02-01 05:11:18
推荐回答(5个)
回答1:

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

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

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

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

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

回答2:

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

回答3:

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

回答4:

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

回答5:

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