深入解析C/C++二维数组:从定义到指针本质

发布于:2025-08-12 ⋅ 阅读:(15) ⋅ 点赞:(0)

资料合集下载链接:

https://pan.quark.cn/s/472bbdfcd014​

前言

在C/C++编程中,数组是我们打交道最多的数据结构之一。而当维度从一维扩展到二维时,许多初学者会感到困惑,尤其是在理解二维数组名到底是什么、它如何与指针共舞以及如何作为函数参数传递等方面。

本文将为您系统性地梳理二维数组的知识点,通过详细的代码案例,揭开二维数组名的“庐山真面目”,让您不仅知其然,更知其所以然。

一、二维数组的定义与初始化

二维数组,本质上是“数组的数组”。它在内存中是连续线性存储的,但逻辑上我们将其视为一个表格(矩阵),拥有行(row)和列(column)。

定义一个二维数组的基本语法是:​​类型说明符 数组名[行数][列数];​

初始化二维数组有以下几种常见方式:

  1. 1. 分行初始化(推荐):这是最清晰、可读性最高的方式。
  2. 2. 连续初始化:将所有元素放在一个大括号内,编译器会自动按顺序填充。
  3. 3. 部分初始化:只初始化部分元素,其余未被初始化的元素将自动置为0。

【代码案例 1:二维数组的三种初始化方式】

#include <iostream>

// 辅助函数,用于打印二维数组
void printArray(int arr[3][3], int rows, int cols) {
    for (int i = 0; i < rows; ++i) {
        for (int j = 0; j < cols; ++j) {
            std::cout << arr[i][j] << " ";
        }
        std::cout << std::endl;
    }
    std::cout << "--------------------" << std::endl;
}

int main() {
    // 方式一:分行初始化,最清晰可读
    // 注意:最后一行初始化后的逗号可加可不加,是合法的
    int arr1[3][3] = {
        {1, 2, 3},
        {4, 5, 6},
        {7, 8, 9}, // 这个逗号是可选的
    };
    std::cout << "方式一:分行初始化" << std::endl;
    printArray(arr1, 3, 3);

    // 方式二:连续初始化
    int arr2[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
    std::cout << "方式二:连续初始化" << std::endl;
    printArray(arr2, 3, 3);

    // 方式三:部分初始化
    int arr3[3][3] = {
  
  {1}, {4, 5}};
    std::cout << "方式三:部分初始化 (未指定元素自动为0)" << std::endl;
    printArray(arr3, 3, 3);

    return 0;
}

【运行结果】

方式一:分行初始化
1 2 3 
4 5 6 
7