#include #include 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"); } }