帮助我理解代码解释一下array *p[]里面有什么。数组不应该是A的所有元素的地址吗?说明printf语句的输出
main( )
{
static int a[ ] = {0,1,2,3,4};
int *p[ ] = {a,a+1,a+2,a+3,a+4};
int **ptr = p;
ptr++;
printf(" %d %d %dn", ptr-p, *ptr-a, **ptr);
*ptr++;
printf(" %d %d %dn", ptr-p, *ptr-a, **ptr);
*++ptr;
printf(" %d %d %dn", ptr-p, *ptr-a, **ptr);
++*ptr;
printf(" %d %d %dn", ptr-p, *ptr-a, **ptr);
}
输出:1 1 1
2 2 2
3 3 3
3 4 4
你有一个int数组,int *数组和int **。
现在,检查ptr - p
就是检查ptr点和p点之间的差异(中间有多少int块)。*ptr-a
检查*ptr(指针本身)所指向的地址与a所指向的地址的区别,最后**ptr
检查*p
所指向的位置的数组值。
由于您像这样移动指针:*++ptr, *ptr++, ptr++
,那么指针指向更远的位置,因此输出增大。
最后一个增量++*ptr
作用于p
的值,而不是ptr
的值,因此ptr - p
保持不变