qfedu-c-level/day10/d2.c

35 lines
982 B
C

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