C 指针算法中的一元增量运算符
这是我的第一篇文章 我有一个在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
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);