解释下面c++程序的输出



帮助我理解代码解释一下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保持不变

相关内容

  • 没有找到相关文章

最新更新