繁体   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