Mảng hai chiều là gì? Cách khai báo và khởi tạo trong C++

Đây là bài 32/43 bài của series môn học Nhập môn lập trình

1. Mảng hai chiều là gì?

Trong lập trình, có những trường hợp cần lưu trữ dữ liệu dưới dạng ma trận gồm nhiều dòng và nhiều cột.

Ma trận là gì?

Do đó, cần một cấu trúc dữ liệu để lưu trữ ma trận. Đó là mảng hai chiều. Mảng 2 chiều lưu trữ các phần tử theo dạng bảng gồm dòng và cột.

Two dimensional array

Có thể hình dùng mảng 2 chiều ở trên như là một bảng gồm 3 dòng và 4 cột. Mỗi dòng thì lưu trữ như mảng một chiều.

2. Cách khai báo và khởi tạo mảng hai chiều

Cú pháp khai báo

<kiểu dữ liệu> <tên biến mảng>[<Số dòng>][<Số cột>];

Ví dụ:

int Mang2Chieu[3][4];
Mảng hai chiều

Khởi tạo mảng 2 chiều

Khởi tạo như mảng một chiều nhưng có khai báo số dòng và số cột
int temp[4][3] = {50, 70, 60, 48, 75, 62, 51, 69, 60, 52, 78, 63}; 
50 70 60
48 75 62
51 69 60
52 78 63
Khởi tạo nhóm các dòng
int temp[4][3] = {{50, 70, 60}, {48, 75, 62}, {51, 69, 60}, {52, 78, 63}};
50 70 60
48 75 62
51 69 60
52 78 63
Khởi tạo một số phần tử đầu, các phần tử còn lại có giá trị ngẫu nhiên, thường là 0
int temp[7][4] = {{50, 70, 60}, {48, 75, 62}, {51, 69, 60}, {52, 78, 63}};
50 70 60 0
48 75 62 0
51 69 60 0
52 78 63 0
0  0  0  0
0  0  0  0
0  0  0  0
Tự động xác định số lượng hàng nhưng phải xác định số cột
int temp[][3] = {50, 70, 60, 48, 75, 62, 51, 69, 60, 52, 78, 63};
50 70 60
48 75 62
51 69 60
52 78 63

Truy xuất đến một phần tử trong mảng hai chiều

Thông qua chỉ số hàngchỉ số cột trong mảng. Cú pháp: <tên biến mảng>[<cs1>][<cs2>]

Ví dụ: Có mảng int a[3][4] = {{50, 70, 60, 80}, {48, 75, 62, 25}, {51, 69, 60, 21}}; Truy xuất phần tử ở dòng 1 cột 2 là a[1][2];

Truy xuất mảng hai chiều

Các truy xuất hợp lệ: a[0][0], a[0][1], …, a[2][2], a[2][3]

Các truy xuất không hợp lệ: a[-1][0], a[2][4], a[3][3],…

3. Một số lỗi thường gặp khi khai báo và khởi tạo mảng hai chiều

Khai báo nhưng không khởi tạo mảng nên truy xuất sẽ có giá trị rác

#include <iostream>
#include <string>
using namespace std;

int main() {
	int temp[4][3];//chưa khởi tạo
	for(int i=0;i<4;i++){
		for(int j=0;j<3;j++){
			cout<<temp[i][j]<<" ";//truy xuất giá trị rác
		}
		cout<<"\n";
	}

	system("pause");
}
Các phần tử trong mảng
-858993460 -858993460 -858993460
-858993460 -858993460 -858993460
-858993460 -858993460 -858993460
-858993460 -858993460 -858993460

Khai báo không chỉ rõ số dòng và số cột

Khai báo int temp[][]; sẽ bị lỗi, khai báo đúng là int temp[2][3];

Khai báo và khởi tạo tách biệt sẽ bị lỗi

int temp[2][3];
temp[2][3] = {{1,2, 3},{3,4, 5}};//error
temp = {{1,2, 3},{3,4, 5}};//error

Khi khai báo mà không khởi tạo thì cần viết chương trình nhập mảng 2 chiều.

5/5 - (1 bình chọn)
Bài trước và bài sau trong môn học<< Lớp string trong C++ và các hàm thường dùng của lớp stringCác kỹ thuật lập trình với mảng 2 chiều và minh họa với C++ >>
Chia sẻ trên mạng xã hội:

Trả lời

Lưu ý:

1) Vui lòng bình luận bằng tiếng Việt có dấu.

2) Khuyến khích sử dụng tên thật và địa chỉ email chính xác.

3) Mọi bình luận trái quy định sẽ bị xóa bỏ.