4.2.1. Định nghĩa và khai báo
Mảng hai chiều là mảng có nhiều phần tử, mỗi phần tử là một mảng một chiều khác. Có thể xem mảng hai chiều là một bảng (các hàng, các cột chỉ định các ô). Mảng ba chiều là mảng có nhiều phần tử, mỗi phần tử là một mảng hai chiều. Trong thực tế, mảng hai chiều được sử dụng rộng rãi.
Hình 4.4. Minh họa một mảng hai chiều với 3 dòng và 4 cột
Để định nghĩa kiểu mảng hai chiều các phần tử thuộc kiểu dữ liệu KDL với số dòng tối đa SD và số cột tối đa SC ta viết:
typedef KDL TênKiểuMảngHaiChiều [SD] [SC];
Tương tự với trường hợp mảng một chiều, thường ta không sử dụng hết kích thước của mảng hai chiều mà chỉ sử dụng các dòng, và các cột đầu tiên, ta cần khai báo các biến nguyên lưu trữ số dòng, số cột thực sự này.
a0, a1, .., aN-1 X i 0 i < N và ai != X Đúng Sai i i + 1 i = N Đúng -1 Sai i Cột 0 Cột 1 Cột 1 Cột 2 Cột 3 Dòng 0 Dòng 1 Dòng 2 Chỉ số cột Chỉ số dòng Tên mảng
Khai báo mảng hai chiều:
TênKiểuMảngHaiChiều tên_biến;
Có thể khai báo trực tiếp (và đặt giá trị ban đầu) mảng hai chiều tương tự trong trường hợp mảng một chiều.
Ví dụ 4.3: Một số khai báo một mảng hai chiều và ý nghĩa
int b[2][2] = { { 1, 2 }, { 3, 4 } };
b có 2 dòng và hai cột (dòng 0 chứa các số nguyên 1, 2; dòng 1 chứa các số nguyên 3, 4).
int b[2][2] = { { 1 }, { 3, 4 } };
b[0][0] = 1, b[0][1] = 0, b[1][0] = 3 và b[1][1] = 4. int b[2][3] = { 1, 2, 3, 4, 5 };
b[0][0] = 1, b[0][1] = 2, b[0][2] = 3, b[1][0] = 4, b[1][1] = 5, và b[1][2] = 0. Trong thực tế, mảng hai chiều có nhiều ứng dụng: cài đặt các thao tác, phép toán trên ma trận; cài đặt cấu trúc bảng dùng trong quy hoạch động, …