Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Định nghĩa mảng đa chiều trong C/C++

Mảng đa chiều là mảng của mảng. Dữ liệu lưu trữ theo thứ tự hàng (row-major order).

Cú pháp

kiểu_dữ_liệu tên_mảng[kích_thước1][kích_thước2]...[kích_thướcN];

Khởi tạo

// Khai báo + khởi tạo
int matrix[2][3] = { {1, 2, 3}, {4, 5, 6} };

// Có thể bỏ kích thước hàng đầu
int matrix[][3] = { {1, 2, 3}, {4, 5, 6} }; // OK
// int matrix[][] = ...; // LỖI - phải có kích thước từ chiều 2 trở đi

Ví dụ hoàn chỉnh

#include <stdio.h>

int main() {
    // Khai báo mảng 2x3
    int arr[2][3] = { {5, 2, 3}, {28, 8, 30} };
    
    // Duyệt và in
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            printf("arr[%d][%d] = %d\n", i, j, arr[i][j]);
        }
    }
    return 0;
}

Kết quả

arr[0][0] = 5
arr[0][1] = 2
arr[0][2] = 3
arr[1][0] = 28
arr[1][1] = 8
arr[1][2] = 30

Mảng 3 chiều

int cube[2][3][4]; // 2 khối, mỗi khối 3 hàng, 4 cột

// Khởi tạo
int cube[2][3][4] = {
    { {1,2,3,4}, {5,6,7,8}, {9,10,11,12} },
    { {13,14,15,16}, {17,18,19,20}, {21,22,23,24} }
};

Truy cập phần tử

// 2D: arr[hàng][cột]
// 3D: arr[khối][hàng][cột]

arr[1][2] = 99; // Gán giá trị
int val = arr[0][1]; // Đọc giá trị

Mảng động (C++)

// Vector của vector (khuyến nghị)
std::vector<std::vector<int>> matrix(rows, std::vector<int>(cols));

// Hoặc mảng 1D giả lập 2D (hiệu quả hơn)
std::vector<int> matrix(rows * cols);
auto at = [&](int r, int c) -> int& { return matrix[r * cols + c]; };

Lưu ý quan trọng

  • Chỉ số bắt đầu từ 0, kết thúc tại size-1
  • Mảng lưu liền mạch trong bộ nhớ (row-major)
  • Kích thước phải là hằng số compile-time (trừ VLA C99)
  • C++: ưu tiên std::vector, std::array, hoặc std::mdspan (C++23)