三类指针完整解析:元素指针、行指针、数组指针步进规则
一、数组基础
int a[3][4]; // 3行4列 int 二维数组int 占 4 字节
1. 普通指针 int *p
int *p; p = &a[0][0];• p:指向单个 int 元素
• p + 1:向后偏移 1 个 int → 偏移 4 字节
• 等价于 &a[0][0] + 1,指向当前行下一个元素。
2. 数组指针 int (*p1)[4]
int (*p1)[4]; p1 = &a[0];• p1:指向包含 4 个 int 的一维数组(一行)
• p1 + 1:向后偏移一整行一行大小:4 * 4 = 16 字节
• 等价于 &a[0] + 1,直接跳到下一行首地址。
3. 指向二维数组的指针 int (*p2)[3][4]
int (*p2)[3][4]; p2 = &a;• p2:指向整个 3 行 4 列 的二维数组
• p2 + 1:向后偏移整个二维数组数组总大小:3 * 4 * 4 = 48 字节
• 等价于 &a + 1,跳过整个二维数组。
总结(核心区别)
| 指针定义 | 指向对象 | +1偏移字节 |
|---|---|---|
int *p | 单个 int 元素 | 4 |
int (*p1)[4] | 一维数组(一行) | 16 |
int (*p2)[3][4] | 整个二维数组 | 48 |