C 指针算法中的一元增量运算符

C 指针算法中的一元增量运算符,c,pointers,increment,operator-keyword,C,Pointers,Increment,Operator Keyword,这是我的第一篇文章 我有一个在C中反转字符串的函数 我找到的 void reverse(char* c) { if (*c != 0) { reverse(c + 1); } printf("%c",*c); } 它工作正常,但如果我更换: reverse(c + 1); 与: 原始字符串的第一个字符被截断。我的问题是为什么会是 在这种情况下,语句是否不等价 谢谢因为c+1不会更改c的值,++c会更改。c

这是我的第一篇文章

我有一个在C中反转字符串的函数 我找到的

    void reverse(char* c) {
        if (*c != 0) {
            reverse(c + 1);
        }
        printf("%c",*c);
    }
它工作正常,但如果我更换:

reverse(c + 1);
与:

原始字符串的第一个字符被截断。我的问题是为什么会是 在这种情况下,语句是否不等价


谢谢

因为
c+1
不会更改
c
的值,
++c
会更改。

c+1
不会更改
c


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

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

中的某个新位置。如上所述,
++c
会更改
c
的值,但
c+1
不会


这在递归调用本身中并不重要:
reverse(c+1)
reverse(++c)
将把相同的值传递给
reverse
;在递归调用之后,在
printf
中使用
c
时会出现这种差异——在
++c
情况下,当您到达
printf
时,
c
的值已经更改,如果将
printf
调用中的
*c
更改为
*-c
,则效果良好。
reverse(++c);