首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(++variable)和(variable++)之间的差异

(++variable)和(variable++)之间的差异
EN

Stack Overflow用户
提问于 2013-07-23 17:58:28
回答 2查看 2.3K关注 0票数 1

我这里有一些C代码:

代码语言:javascript
复制
char *cat_copy(char *dest, char *src)
{
    char *start = dest;

    while (*++dest);    //increment unless it can't anymore.

    while (*src++)
    {
        *dest = *(src - 1);
        dest++;
    }
    return start;
}

我不得不使用while (*++dest)来让它工作,而不是while (*dest++)

我读到:"--" operator in while ( ) loop,在我看来,使用while (*dest++)是有意义的。

为什么它不适用于*dest++*dest++*++dest的区别是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-23 18:07:07

代码语言:javascript
复制
while (*++dest);

这会增加dest,然后检查它是否指向字符串的终止空字节。在字符串的末尾,这将使dest指向终止空字节。

代码语言:javascript
复制
while (*dest++);

这会增加dest,然后在增量发生之前检查它是否指向终止null。在字符串的末尾,这将使dest在终止null之后指向该字符。

因为在下面的复制部分,您希望覆盖dest的原始终止null,所以第一个版本工作得更好。

不过,第一个版本仍然有一个bug。它总是至少增加一次dest,如果dest从空字符串开始,这不是正确的做法。将*dest检查与dest++增量分离,使循环更加清晰,并正确地处理这种情况:

代码语言:javascript
复制
while (*dest)
   dest++;
票数 2
EN

Stack Overflow用户

发布于 2013-07-23 18:03:48

代码语言:javascript
复制
while (*++dest);

就像

代码语言:javascript
复制
do {
  dest++; // or ++dest
} while (*dest);

何地as

代码语言:javascript
复制
while (*dest++);

就像

代码语言:javascript
复制
while (*dest) {
  dest++;
}
dest++;

您需要复制所有的char,包括NUL字节。

使用while (*++dest);,您将在取消引用之前递增dest。如果第一个char是NUL字节,您就会错过它并在on上循环。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17817600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档