#include <stdio.h>
#include <stdint.h>

int main()
{
    int m[3][5] = {{1, 2, 3, 4, 5},
                   {6, 7, 8, 9, 10},
                   {11, 12, 13, 14, 15}};
    // 数组指针
    int(*p)[5] = m; // 5 表示每行有 5 个元素，*p 表示第 0 行的地址
    int(*p2)[5] = m + 2;

    printf("%p\n", p2);
    printf("%p\n", p);
    uintptr_t ret2 = (uintptr_t)p2 - (uintptr_t)p; // uintptr_t 无符号整型                          // 除以每个元素的大小

    int ret = p2 - p;     // 原理: (m + 2) - m = 2
    printf("%d\n", ret2); // 2

    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 5; j++)
        {
            printf("第 %d 行第 %d 列的地址: %p\n", i, j, *(p + i) + j);
            scanf("%d", *(p + i) + j); // *(p + i) + j 表示第 i 行第 j 列的地址
        }
    }

    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 5; j++)
            printf("%d ", *(*(p + i) + j));
        printf("\n");
    }
}