【发布时间】:2021-07-28 20:05:00
【问题描述】:
为什么当我像这样递增 **pptr++ 而不是 *ptr++ 时,我得到了一些垃圾值?谁能帮帮我?
#include<stdio.h>
int main()
{
static int array[] ={9,1,2,3,4};
int *ptr = array;
int **pptr = &ptr;
**pptr++;
printf("%d",**pptr );
*ptr++;
printf("%d",*ptr );
return 0;
}
【问题讨论】:
-
我建议你拿一些纸和一支铅笔,把数组画成一个矩形,你把它分成五个正方形。第一个方格是
array[0],最后一个方格是array[4]。然后为ptr绘制另一个正方形,为pptr绘制另一个正方形。然后画箭头从pptr到ptr,从ptr到array[0]。这就是指针真正起作用的方式。 -
至于
++会发生什么,the answer by MiceCAT 对此进行了解释。有了这些信息,当你做增量时,在你的纸上擦除并重新绘制相应的箭头。请注意ptrnow 是如何在您的纸上指向arrow[1]的?注意pptr不再指向任何有效的地方。 -
**pptr++;没有任何意义,所以这就是原因。在少数情况下您实际上需要使用指向指针的指针,而这不是其中之一。
标签: c dereference pointer-arithmetic post-increment