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

这是我的第一篇文章。 我有这个函数用于在C中反转字符串 我发现了
    void reverse(char* c) {
        if (*c != 0) {
            reverse(c + 1);
        }
        printf("%c",*c);
    }
它工作正常,但如果我更换:
reverse(c + 1);
有:
reverse(++c);
原始字符串的第一个字符被截断。我的问题是为什么会这样 在这种情况下,语句不相同? 谢谢     
已邀请:
因为
c + 1
不会改变
c
的值,而
++c
会改变。     
让我们稍微扩展弗雷德的答案。
++c
相当于
c = c+1
,而不是
c+1
。如果用
reverse(++c)
替换
reverse(c+1)
线,则改变
c
。就递归调用而言,这无关紧要(为什么?),但意味着
c
指向
printf
中的某个新位置。     
c + 1
不会改变
c
++c
递增c然后在替换的递归调用中使用新值
reverse(++c)
    
如上所述,
++c
改变
c
的值,但
c+1
不改变。 这在递归调用本身中无关紧要:
reverse(c+1)
reverse(++c)
会将相同的值传递给
reverse
;在递归调用后在
printf
中使用
c
时会出现差异 - 在
++c
情况下,
c
的值在到达
printf
时已经改变。     

要回复问题请先登录注册