(++变量)和(变量++)之间的C差异

时间:2013-07-23 17:58:29

标签: c loops syntax operators

我这里有一些C代码:

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之间有什么区别。

2 个答案:

答案 0 :(得分:4)

while (*++dest);

就像

do {
  dest++; // or ++dest
} while (*dest);

其中

while (*dest++);

就像

while (*dest) {
  dest++;
}
dest++;

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

使用while (*++dest);,您在解除引用之前递增dest。如果第一个 char是NUL字节,那么你会错过它并循环播放。

答案 1 :(得分:2)

while (*++dest);

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

while (*dest++);

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

由于在以下复制部分中您要覆盖dest的原始终止空值,因此第一个版本效果更好。

第一个版本仍然有一个bug。 总是至少增加dest一次,如果dest以空字符串开头,这不是正确的事情。将*dest检查与dest++增量分开会使循环更清晰并正确处理此情况:

while (*dest)
   dest++;