35 lines
982 B
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");
|
||
|
}
|
||
|
}
|