指针算术中的一元递增运算符

时间:2010-12-26 04:30:47

标签: c pointers increment operator-keyword

这是我的第一篇文章。

我有这个函数用于在C中反转字符串 我找到了。

    void reverse(char* c) {
        if (*c != 0) {
            reverse(c + 1);
        }
        printf("%c",*c);
    }

它工作正常,但如果我更换:

reverse(c + 1);

使用:

reverse(++c);

原始字符串的第一个字符被截断。我的问题是为什么会这样 在这种情况下,陈述不相同?

由于

4 个答案:

答案 0 :(得分:7)

因为c + 1不会更改c的值,而++c会更改。{/ p>

答案 1 :(得分:4)

让我们稍微扩展弗雷德的答案。 ++c相当于c = c+1,而不是c+1。如果您将行reverse(c+1)替换为reverse(++c),则会更改c。就递归调用而言,这无关紧要(为什么?),但意味着c指向printf中的新位置。

答案 2 :(得分:2)

c + 1不会改变c

++c递增c,然后在替换的递归调用中使用新值reverse(++c)

答案 3 :(得分:1)

如上所述,++c更改了c的值,但c+1没有。

这在递归调用本身无关紧要:reverse(c+1)reverse(++c)会将相同的值传递给reverse;在递归调用后c中使用printf时会出现差异 - 在++c案例中,c的值在您到达时已更改printf {{1}}。