相关疑难解决方法(0)

指针表达式:**ptr ++,*++*ptr和++**ptr使用

我正在尝试使用C指针文献.在其中一个插图中,我遇到了以下代码.

# include <stdio.h>

int main()
{
     static int a[]={0,1,2,3,4};
     static int *p[]={a, a+1, a+2, a+3, a+4};

     int **ptr;

     ptr =p;

     **ptr++;
     printf("%d %d %d\n", ptr-p, *ptr-a, **ptr);

     *++*ptr; 
     printf("%d %d %d\n", ptr-p, *ptr-a, **ptr);

     ++**ptr;
     printf("%d %d %d\n", ptr-p, *ptr-a, **ptr);

     return 0;
}
Run Code Online (Sandbox Code Playgroud)

我收到输出为.

1 1 1
1 2 2
1 2 3
Run Code Online (Sandbox Code Playgroud)

我在为这个输出辩护时遇到了问题.我在副本上制作了很多盒子,以便轻松掌握问题.我能够证明输出的合理性1 1 1,我的麻烦始于声明,*++*ptr.

因为,一元运算符从右到左执行.因此,*ptr将首先处理,然后ptr将增加值.在这个增量之后,我不确定会发生什么,书中说不知何故p也会增加指向此数组中的下一个元素.输出1 2 2只能通过增量来实现p.

我不确定这种问题是否恰好适合stackoverflow.
我尽我所能,浪费了至少10页,上面画着盒子.

任何澄清将不胜感激.

c arrays pointers

29
推荐指数
2
解决办法
5524
查看次数

标签 统计

arrays ×1

c ×1

pointers ×1