簡體   English   中英

帶有**和不帶有C的遞增指針的差異

[英]difference in incrementing pointer with ** and without in C

我在理解這兩種遞增指針的方式上的區別時遇到了一個問題:

int **a;

a++;      //works fine
**a++;    //same here
a += n;   //still good
**a += n; //is not the same and I can't figure out what is going on

我試圖在這里以相反的順序打印程序的參數

int main(int argc, char **argv)
{
    argv += argc;                 //works fine until it is changed to 
                                  //                   **argv += argc
    while (--argc > 0)
    {
        argv--;
        (*argv)--;
        while (*(*argv)++)
            ft_putchar(**argv);
        if (argc - 1 > 0)
            ft_putchar('\n');
    }
    return (1);
}

總結問題-為什么第二種方法不一樣?

我認為讓您感到困惑:

**a++被解析為**(a++)
**a += n被解析為(**a) += n

這是由於操作員優先

我的建議是在這種情況下始終使用括號以避免任何混淆。

現在來看每種情況:

情況1

a++

指針算術。 后增量a

情況二

**a++

被解析為**(a++)

  • 它發布a增量-指針算術
  • 評估的結果(a++)a -增量前的值
  • 那么你有一個雙重間接。

因此,以上內容與以下內容等效(或多或少):

**a;
a = a + 1;

情況3

a += n

指針算術。 我期望自己不言自明。

案例4

**a += n

這被解析為

(**a) += n

所以,你做一個雙間接a越來越尖銳整數的值,然后你增加整數(整數運算)。

暫無
暫無

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

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