怎么做
  1. 题面里的虚线方框就是要填的空
  2. 点候选项,它会填进当前高亮的那个空
  3. 点已填好的空,可以把选项取回来重选
  4. 全部填满后「提交」才会亮起
卡住了就点右下角的 👩‍🏫 问 AI 老师,她会给提示但不直接给答案。

二维数组的行和列地址

👁️ 21 人浏览 💬 0 人评论 ❤️ 添加收藏

int a[3][4]:a + i 一次跳过一整行(4 个 int)

a + 0

a + 1

a + 2

二维数组 int a[3][4] 可以看成 3 行,每一行是一个有 4 个 int 的一维数组,在内存里一行接一行连续存放。

  • a + i 指向第 i 行:加 1 一次跳过一整行(4 个 int)。
  • a[i] 和 *(a + i) 一样,是第 i 行首元素的地址;a[i] + j 指向 a[i][j]。
  • 所以 a[i][j] 等于 *(a[i] + j),也等于 *(*(a + i) + j)。
  • 行指针:int (*p)[4] = a;,p 指向「含 4 个 int 的一行」,p + 1 跳一行,用法和 a 一样。括号不能省:int *p[4] 是「4 个指针组成的数组」,后面再学。
  • 普通的 int *q = a[0]; 只认一个 int,q + 1 只走一格,可以从 a[0][0] 一直走到最后。
#include <stdio.h>

int main(void)
{
    int a[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
    int (*p)[4] = a;
    int *q = a[0];
    printf("%d\n", *(*(a + 1) + 2));
    printf("%d\n", *(a[2] + 1));
    printf("%d\n", *(*(p + 2) + 3));
    printf("%d\n", *(q + 5));
    return 0;
}

四行输出依次是【0】【1】【2】【3】。

请登录后作答。
去登录
👩‍🏫
AI
💬 题目评论
🔒 登录并作答后可看讨论