求详细代码注释及为什么这么输出(主要是指针和数组运行规律是什么)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

// 二维指针

    printf("Addresses of two dimensional pointer\n");

    int** ptr = (int**) malloc(sizeof(int*) * 4); 

    printf("%d:\t%d\n", &ptr, ptr);

    for(i = 0; i < 4; i++) {

        *(ptr + i) = (int*) malloc(sizeof(int) * 2);

    }

    for(i = 0; i < 4; i++) {

        for(j = 0; j < 2; j++) {

            *(*(ptr+i) + j) = i * 2 + j;

        }

    }

    for(i = 0; i < 4; i++) {

        printf("%d:\t%d\n", ptr + i, *(ptr + i));

    }

    printf("==\n");

    for(i = 0; i < 4; i++) {

        for(j = 0; j < 2; j++) {

            printf("%d:\t%d\t%d\n",*(ptr + i) + j, *(*(ptr + i) + j), ptr[i][j]);

        }

        printf("==\n");

    }


求详细代码注释及为什么这么输出(主要是指针和数组运行规律是什么)

特发性震颤