[英]The unary increment operator in pointer arithmetic
這是我的第一篇文章。
我有這個函數來反轉我找到的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 = 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
; 區別發生在你使用c
在printf
遞歸調用后-在++c
情況下,該值c
已經被你到達的時間改變printf
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.