2

这是我的第一篇文章。

我有这个函数用于反转我发现的 C 中的字符串。

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

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

reverse(c + 1);

和:

reverse(++c);

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

谢谢

4

4 回答 4

7

因为c + 1不会改变 , 的值c并且++c会改变。

于 2010-12-26T04:33:16.397 回答
4

让我们稍微扩展一下 Fred 的答案。 ++c等于c = c+1,不是c+1。如果将行替换为reverse(c+1)reverse(++c)c更改。就递归调用而言,这并不重要(为什么?),但意味着c指向printf.

于 2010-12-26T04:39:05.297 回答
2

c + 1不改变c

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

于 2010-12-26T04:33:55.380 回答
1

如前所述,++c更改 的值cc+1不会更改。

这在递归调用本身中并不重要:reverse(c+1)并将reverse(++c)相同的值传递给reverse; 当您c在递归调用之后使用 a时会发生差异printf——在这种++c情况下,c当您到达printf.

于 2010-12-26T04:41:02.077 回答