有关while问题,while(*st++ = *s1++);

#include
#include

char *delstr(char *src, const char *sub)
{
char *st = src,*s1=NULL;
const char *s2=NULL;
while(*st&&*sub)
{
s1 = st;
s2 = sub;
while(*s1&&*s2&&!(*s1 - *s2))
{
s1++;
s2++;

    }
printf("%s\n%s\n%s\n", st,s1,s2);

    if(!*s2)
    {printf("%s\n%s\n%s\n", st,s2,src);
        while(*st++ = *s1++);
        printf("%s\n%s\n%s\n", st,s1,src);
        st = src;
    printf("%s\n%s\n", st,src);
    }
    printf("%s\n%s\n", st,src);

    st++;
     printf("%s\n%s\n", st,src);

}
return (src);

}
int main()
{
char a[] = "asdfgh";
char b[] = "sdf";

printf("%s\n", delstr(a,b));

return 0;
}
其中while(*st++ = *s1++);是什么原理,帮我解答一下,谢谢

引用请注明出处:http://blog.csdn.net/int64ago/article/details/7367270

今天面试被问到for(;;)和while(1)的效率问题,两个都是死循环,我开始主观的认为for(;;)里面有三次运算(或两次),效率当然是while(1)高,但是被告知错了,回来生成汇编看了下:
1、while(1)汇编

.file   "test_effect......<br/><strong>答案就在这里:</strong><a target='_blank' rel='nofollow' href='http://blog.csdn.net/int64Ago/article/details/7367270'>for(;;)和while(1)的效率问题</a><br/>----------------------你好,人类,我是来自CSDN星球的问答机器人小C,以上是依据我对问题的理解给出的答案,如果解决了你的问题,望采纳。
 st和s1都是char *指针,都指向一个字符串,解引用(*)表示取出当前所指的字符
*st++=*s1++表示先比较st和s1所指向的字符是否相等,然后两个指针都向后++移一位
如果之前的比较结果是true,那么继续while循环进行比较

while(*st++ = *s1++);
先执行 字符复制,
再执行,指针自增,和检测表达式的结果是否 0 ,(这里自增,和检测两个计算,没有执行顺序,仅仅保证都能执行到)
也就是否 串结束符'\0'然后,根据检测结果执行或者结束循环
因为 循环语句为空,所以这个循环,仅仅执行条件表达式

C循环都是当型循环
while循环的原理是:
while(expr)s;
先执行 条件表达式(计算),并判断它的值为真或者假
真:执行循环语句 s;继续下一轮循环
假:不执行s 结束循环。

根据这个原理,
当while循环语句为空语句的时候,
每一轮循环,
仅仅执行条件表达式,然后判断值为表达式的值,为真或者假
真:继续下一轮循环,
假:结束循环。