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ặcstd::mdspan(C++23)