题目

从标准输入读入一个 r×c 的二维整数矩阵,演示使用行指针或指针偏移量按行格式化打印整个矩阵。

输入格式:第一行输入行数 r 和列数 c;随后 r 行每行输入 c 个整数。

输出格式:输出 r 行矩阵内容,每行数字以空格分隔。

数据范围与约定:1 ≤ r, c ≤ 20。

思路与算法

1. 二维数组的连续行主序存储
C 语言二维数组在内存中是按行连续展开的一维线性空间。元素 a[i][j] 对应的内存偏移为 *(a + i * c + j)。

2. 指针遍历方式
可通过行指针 int *row = a[i];,结合列偏移 row[j] 完成高效率访问。

完整程序

#include <stdio.h>

int main(void)
{
    int a[2][4];
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 4; j++) {
            scanf("%d", &a[i][j]);
        }
    }

    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 4; j++) {
            // 二维数组的指针本质:
            // a + i 为第 i 行的首地址,*(a + i) 退化为指向行首元素的指针
            // *(a + i) + j 为第 i 行第 j 列的地址,最外层解引用 *(*(a + i) + j) 取出该值
            printf("%d%c", *(*(a + i) + j), j + 1 < 4 ? ' ' : '\n');
        }
    }
    return 0;
}

运行示例

输入:

1 2 3 4
5 6 7 8

输出:

1 2 3 4
5 6 7 8