Search…

Mảng Nhiều Chiều

17/09/20203 min read
Hướng dẫn cách khai báo, khởi tạo và một số thao tác với mảng nhiều chiều trong C++.

Mảng nhiều chiều

Mảng nhiều chiều là gì?

Như đã biết, mảng một chiều chứa tập hợp nhiều phần tử có cùng kiểu dữ liệu với nhau, tương tự như thế, mảng nhiều chiều cũng chứa nhiều phần tử, mỗi phần tử lại là một mảng một chiều, các mảng một chiều này có kích thước bằng nhau và cũng được truy xuất thông qua một chỉ số - số thứ tự của mảng một chiều đó trong mảng nhiều chiều.

Ví dụ: Mảng 2 chiều là mảng chứa n phần tử, mỗi phần tử là một mảng một chiều. Mảng 3 chiều sẽ chứa n phần tử, mỗi phần tử là một mảng 2 chiều chứa m mảng một chiều.

 

Khi lưu trữ, mảng nhiều chiều được “chuyển đổi” thành mảng một chiều và lưu trên một vùng nhớ liên tục tương tự như mảng một chiều.

 

Khai báo mảng nhiều chiều

Trong C++, mảng nhiều chiều được khai báo như sau:

kiểu_dữ_liệu	tên_mảng[số_phần_tử_chiều_1][số_phần_tử_chiều_2]...[ số_phần_tử_chiều_n];

kiểu_dữ_liệu, tên_mảng, số_phần_tử_chiều_x có quy tắc sử dụng tương tự như mảng một chiều là phải là hằng số.

Ví dụ:

// Khai báo mảng 2 chiều 3 x 4 kiểu int
int a[3][4];

// Khai báo mảng 3 chiều 3 x 4 x 5 kiểu float
float a[3][4][5];

Khởi tạo giá trị phần tử của mảng nhiều chiều

Giống như mảng một chiều, có thể khởi tạo giá trị cho các phần tử của mảng nhiều chiều ngay khi khai báo. Ví dụ khai báo và khởi tạo mảng hai chiều a như sau:

int a[3][2] = {6, 4, 5, 9, 0, 7};

Hoặc khởi tạo theo từng chiều để dễ quản lý như sau:

int a[3][5] =
		{
			{1, 2, 3, 4, 5},
			{6, 7, 8, 9, 0},
			{4, 9, 3, 2, 5}
		};

Ngoài ra cũng có thể lược bỏ số_phần_tử đầu tiên như sau:

int a[][5] =
		{
			{1, 2, 3, 4, 5},
			{6, 7, 8, 9, 0},
			{4, 9, 3, 2, 5}
		};

LƯU Ý

Chỉ được bỏ trống số_phần_tử đầu tiên, nếu không trình biên dịch sẽ không thể nào xác định được kích thước của mảng. Ví dụ khai báo mảng a như sau là không hợp lệ:

int a[][] =	
		{
			{1, 2, 3, 4, 5},
			{6, 7, 8, 9, 0},
			{4, 9, 3, 2, 5}
		};

Nếu khai báo như trên, mảng sẽ có tổng cộng 8 phần tử int, nhưng trình biên dịch không thể biết được mảng a2 x 4, 4 x 2, 1 x 8 hay 8 x 1.

Cũng có thể khởi tạo giá trị mảng nhiều chiều sau khi khai báo bằng cách sử dụng vòng lặp, mảng bao nhiêu chiều thì sẽ có bấy nhiêu vòng lặp lồng vào nhau:

int a[5][5];

for (i = 0; i < 5; i++)
{
	for (j = 0; j < 5; j++)
	{
		a[i][j] = value;
	}
}

Truy xuất phần tử

Để truy xuất phần tử trong mảng nhiều chiều, sử dụng lần lượt chỉ số của từng “chiều”. Ví dụ: để truy xuất đến phần tử thuộc hàng 2 cột 3 của mảng hai chiều a, sử dụng a[2][3] , Nên nhớ các chỉ số bắt đầu từ 0.

 

Sử dụng mảng nhiều chiều là tham số của hàm

Để khai báo hàm có mảng nhiều chiều là tham số, có thể để trống chỉ số đầu tiên nhưng phải cung cấp các chỉ số còn lại của mảng để trình biên dịch có thể biét được mảng đó có kích thước như thế nào. Ví dụ:

int a[5][5];

void doSomething(int &a[5][5])
{
	// ...
}

doSomething(a);

Hoặc:

int a[5][5];

void doSomething(int &a[][5])
{
	// ...
}

doSomething(a);

Một số vấn đề khác về mảng, xem thêm tại bài viết Sử Dụng Mảng Trong C++.

IO Stream

IO Stream Co., Ltd

30 Trinh Dinh Thao, Hoa Thanh ward, Tan Phu district, Ho Chi Minh city, Vietnam
+84 28 22 00 11 12
developer@iostream.co

383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024