
CHƯƠNG 6: MẢNG HAI CHIỀU
Khái niệm
• Mảng hai chiều có thể hiểu là một dãy các phần tử được sắp xếp liên tiếp
trong bộ nhớ, từ hàng này sang hàng kia
Khai báo mảng hai chiều
• Cú pháp:
• <tên kiểu> <tên mảng> [<kích thước dòng>][<kích thước cột>]
• Các phần tử mảng được truy nhập bởi hai chỉ số: chỉ số dòng (bắt đầu từ 0
đến số dòng – 1) và chỉ số cột (bắt đầu từ 0 đến số cột – 1)

•Ví dụ 1: int a[5][6]
• Khai báo một mảng hai chiều gồm 30 phần tử, mỗi phần tử có kiểu int
• Các phần tử của mảng a được phân bố trong bộ nhớ như sau:
• a[0][0] a[0][1] … a[0][5]
• a[1][0] a[1][1] … a[1][5]
• …
• a[4][0] a[4][1] … a[4][5]

Khởi tạo giá trị ban đầu cho mảng hai chiều
• Chúng ta có thể khởi tạo mảng hai chiều tương tự với việc khởi tạo mảng
một chiều, bằng cách liệt kê các giá trị trong một danh sách.
•Ví dụ 2:
• int a[2][3] = {
• {11, 12, 13},
• {21, 22, 23}
• };
•Ví dụ 3:
• float b[][4] = {
• {6, 7. 8, 8, 9},
• {3, 12.6, 4, 14},
• {6.5, 20,7, 8}
• };

Nhập xuất mảng hai chiều
•Ví dụ 4:
• #define SIZE1 6
• #define SIZE2 8
• void main()
• { int a[SIZE1][SIZE2]; /* khai báo một mảng 2 chiều nguyên gồm
SIZE1*SIZE2 phần tử */
• int m, n; //lưu số dòng và số cột
• int i, j, tam;
• do
• { <nhập số dòng m và số cột n>
• } while(m < 1 || m > SIZE1 || n < 1 || n > SIZE2);
• // nhập dữ liệu cho mảng từ bàn phím
• for(i = 0; i < m; i++)
• for(j = 0; j < n; j++)
• { printf(“pt thu [%d][%d]:”, i, j);
• scanf(“%d”, &tam);
• a[i][j] = tam;
• }
•

• // xuất dữ liệu của mảng ra màn hình
• for(i = 0; i < m; i++)
• {
• for(j = 0; j < n; j++)
• printf(“%d\t”, a[i][j]);
• printf(“\n”);
• }
• printf(“\n”);
}
Chú ý: Trong C đối với các phần tử của mảng hai chiều ta không thể sử
dụng toán tử lấy địa chỉ (&). Tuy nhiên với mảng hai chiều nguyên thì dùng
được.

