![](/img/trans.png)
[英]Are there many ways of incrementing a pointer in C and what's the difference here?
[英]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
这是由于操作员优先
我的建议是在这种情况下始终使用括号以避免任何混淆。
现在来看每种情况:
a++
指针算术。 后增量a
**a++
被解析为**(a++)
a
增量-指针算术 (a++)
是a
-增量前的值 因此,以上内容与以下内容等效(或多或少):
**a;
a = a + 1;
a += n
指针算术。 我期望自己不言自明。
**a += n
这被解析为
(**a) += n
所以,你做一个双间接a
越来越尖锐整数的值,然后你增加整数(整数运算)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.