首页 文章

解释以下C程序的输出[关闭]

提问于
浏览
-6

帮我理解代码解释一下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 回答

  • 0

    你有一个int数组,int *数组和int ** .

    现在,检查 ptr - p 正在检查ptr点和p点之间的差异(块之间有多少int块) . *ptr-a 检查* ptr(一个指针本身)和a指向的地址之间的区别是什么,最后 **ptr 检查 *p 指向的位置中数组的值 .

    由于您移动指针如下: *++ptr, *ptr++, ptr++ 然后指针指向更远的位置,因此输出增长 .

    最后一个增量 ++*ptr 适用于 p 的值,而不是 ptr ,所以 ptr - p 保持不变

相关问题