输出说明:复杂的指针算术

Qui*_*tic 1 c pointers

我一直在努力了解这个程序的输出:

#include <stdio.h>    
int main(){
    static int arr[] = {0, 1, 2, 3, 4};
    int *p[] = {arr, arr+1, arr+2, arr+3, arr+4};
    int **ptr = p;

    ptr++;
    printf("%d %d %d\n", ptr-p, *ptr-arr, **ptr);
    *ptr++;
    printf("%d %d %d\n", ptr-p, *ptr-arr, **ptr);
    *++ptr;
    printf("%d %d %d\n", ptr-p, *ptr-arr, **ptr);
    ++*ptr;
    printf("%d %d %d\n", ptr-p, *ptr-arr, **ptr);    

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

OUTPUT

1 1 1
2 2 2
3 3 3
3 4 4
Run Code Online (Sandbox Code Playgroud)

有人可以解释输出吗?

小智 8

这是初始快照

在第一次ptr ++之后,它将是: 在此输入图像描述 因此,printf("%d %d %d\n",ptr-p,*ptr-arr,**ptr);将给出:1 1 1

在*ptr ++之后它将是:在此输入图像描述 因此,printf("%d %d %d\n",ptr-p,*ptr-arr,**ptr);将给出:2 2 2

在*++ ptr之后,它将是:

在此输入图像描述

因此,printf("%d %d %d\n",ptr-p,*ptr-arr,**ptr);将给出:3 3 3

在++*ptr之后,它将是:

在此输入图像描述

因此,printf("%d %d %d\n",ptr-p,*ptr-arr,**ptr);将给出:3 4 4

希望能帮助到你.