+ -
当前位置:首页 → 问答吧 → while的问题

while的问题

时间:2013-06-20

来源:互联网

这是C Programming。
复制内容到剪贴板
代码:
#include <stdio.h>
#include <string.h>

char* strDup(char *);

int main(void)
{
    char *str;
    str = strDup("this is a test");
    printf("The string is: %s\n", str);
    return 0;
}

char* strDup(char *s)
{
    char *ps;
    char *pkopy;
   
    if ((pkopy = (char *)malloc(strlen(s) + 1)) == NULL)
        return NULL;
    ps = pkopy; /*remember the starting position */
    while (*pkopy++ = *s++)
        ;
    pkopy = ps;
  /*  strcpy(pkopy,s); */
    return pkopy;
}
我不太懂这句是如何运行的,
但我明白while是什么意思。
复制内容到剪贴板
代码:
  while (*pkopy++ = *s++)
        ;
有人可以跟我解释一下吗?
谢谢。

作者: wong_cnine   发布时间: 2013-06-20

while (*pkopy++ = *s++)

我们由右向左续一了解:
1.  *s++   等於  在s指标所在的位置取得一个字母,然后指标向后移一个位
2.  =   将之前s取得一个字母传给左手边
3.  *pkopy++  等於  取得字母并且存入当前pkopy指标所指的位置,然后指标向后移一个位
4.  当s指标一路向后移,直到取得一个0值时(c字串的尾部),同样这0直也会传给pkopy。
5.  由於s传给pkopy后,工作已经完成,留下就只有pkopy这个算法,而这个算法的结果是0,当while得到0时(0同样代表false)循环就会完结。

作者: tcell   发布时间: 2013-06-21

另外想指出,你的代码最后一部份是:
pkopy = ps;
return pkopy;
上面的pkopy = ps是没有必要的,只需一行:
return ps;
就可以了,因为之前ps已经取得pkopy开头的位置了。

作者: tcell   发布时间: 2013-06-21

哦..我明白了,
你解释得很详细,
之前不知道while能单独使用。

感谢。

作者: wong_cnine   发布时间: 2013-06-21

热门下载

更多