Sad*_*aze 1 c pointers increment
我在理解增加指针的两种方式的差异时遇到了一个问题:
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
Run Code Online (Sandbox Code Playgroud)
我试图在这里以相反的顺序打印程序的参数
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);
}
Run Code Online (Sandbox Code Playgroud)
总结问题 - 为什么第二种方式不一样?
**a++被解析为**(a++)while
**a += n被解析为(**a) += n
这是由于运营商的优先权
我的建议是在这样的情况下总是使用括号来避免任何混淆.
现在来看每个案例:
a++
Run Code Online (Sandbox Code Playgroud)
指针算术.后增量a
**a++
Run Code Online (Sandbox Code Playgroud)
被解析为 **(a++)
a- 指针算术(a++)是a- 增量前的值所以上述内容与以下内容相同(或多或少):
**a;
a = a + 1;
Run Code Online (Sandbox Code Playgroud)
a += n
Run Code Online (Sandbox Code Playgroud)
指针算术.我希望不言自明.
**a += n
Run Code Online (Sandbox Code Playgroud)
这被解析为
(**a) += n
Run Code Online (Sandbox Code Playgroud)
因此,您在a获取指向整数的值时执行双重间接,然后增加该整数(整数运算).