簡體   English   中英

指針算術中的一元遞增運算符

[英]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改變的值cc+1沒有。

這在遞歸調用本身無關緊要: reverse(c+1)reverse(++c)將相同的值傳遞給reverse ; 區別發生在你使用cprintf遞歸調用后-在++c情況下,該值c已經被你到達的時間改變printf

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM