这是我的第一篇文章。
我有这个函数用于在C中反转字符串 我找到了。
void reverse(char* c) {
if (*c != 0) {
reverse(c + 1);
}
printf("%c",*c);
}
它工作正常,但如果我更换:
reverse(c + 1);
使用:
reverse(++c);
原始字符串的第一个字符被截断。我的问题是为什么会这样 在这种情况下,陈述不相同?
由于
答案 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}}。