帮我理解代码解释一下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 %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);
++*ptr;
printf(" %d %d %d\n", ptr-p, *ptr-a, **ptr);
}
OUTPUT:
1 1 1
2 2 2
3 3 3
3 4 4
1 回答
你有一个int数组,int *数组和int ** .
现在,检查
ptr - p
正在检查ptr点和p点之间的差异(块之间有多少int块) .*ptr-a
检查* ptr(一个指针本身)和a指向的地址之间的区别是什么,最后**ptr
检查*p
指向的位置中数组的值 .由于您移动指针如下:
*++ptr, *ptr++, ptr++
然后指针指向更远的位置,因此输出增长 .最后一个增量
++*ptr
适用于p
的值,而不是ptr
,所以ptr - p
保持不变