[Basic] Mảng hai chiều trong C++

Khai báo

Ta biết mỗi phần tử của 1 mảng có kiểu dữ liệu bất kỳ. Khi các phần tử của mảng là 1 mảng thì ta có mảng 2 chiều.

Khai báo mảng 2 chiều theo cú pháp

kieu_du_lieu ten_mang [so_hang][so_cot];

Ví dụ

int arr[3][4]; //Mảng arr có 3 hàng 4 cột

Các phần tử trong mảng 2 chiều có n hàng, m cột

cột 0          côt 1          cột 2  ...   cột m - 1

[0][0]        [0][1]         [0][2]  ...   [0][m-1]       // hàng 0

[1][0]        [1][1]         [1][2]  ...   [1][m-1]       // hàng 1

[2][0]        [2][1]         [2][2]  ...   [2][m-1]       // hàng 2

.....

[n-1][0]      [n-1][1]       [n-1][2] ...  [n-11][m-1]    // hàng n-1

Khởi tạo giá trị cho mảng 2 chiều.

Các phần tử của mỗi hàng được đặt trong dấu {}

Số phần tử của 1 hàng tương ứng với số cột.

Các hàng ngăn cách nhau bằng dấu phẩy.

Ví dụ:

int array[3][5] =
{
   { 1, 2, 3, 4, 5 },     // Hàng 0
   { 6, 7, 8, 9, 10 },    // Hàng 1
   { 11, 12, 13, 14, 15 } // Hàng 2
};

Hoặc

int array[3][5] =
{
   { 1, 2 },            // Hàng 0 = 1, 2, 0, 0, 0
   { 6, 7, 8 },         // Hàng 1 = 6, 7, 8, 0, 0
   { 11, 12, 13, 14 }   // Hàng 2 = 11, 12, 13, 14, 0
};

Truy cập các phần từ của mảng 2 chiều

Để duyệt và truy cập các phần tử của mảng 2 chiểu ta dùng vòng lặp.

Ví dụ

#include <iostream>
 
using namespace std;

int main()
{
 
   const int rows = 3;
 
   const int columns = 5;
 
   int array[rows][columns] =
   {
      { 1, 2, 3, 4, 5 }, // row 0
      { 6, 7, 8, 9, 10 }, // row 1
      { 11, 12, 13, 14, 15 } // row 2
   };
 
   for (int i = 0; i < rows; i++)
   {
 
      for (int j = 0; j < columns; j++)
      {
 
         cout << array[i][j] << " ";
 
      }
 
      cout << endl;
 
   }
 
   return 0;

}

Kết quả

1 2 3 4 5
6 7 8 9 10
11 12 13 14 15

Truyền mảng 2 chiều vào hàm

Để truyền mảng 2 chiều vào hàm, parameter của hàm phải khai báo tường minh số cột của ma trận

Ví dụ

void Print (int arr[][5], int rows, int cols)
{
   //TODO
}

Hoặc

void Print (int (*arr)[5], int rows, int cols)
{
   //TODO
}

Ví dụ trên hàm Print có thể truyền vào mảng 2 chiều có số cột là 5. Nếu ta truyền mảng 2 chiều có số cột khác 5 chương trình sẽ báo lỗi.

Ví dụ

#include <iostream>

using namespace std;

void Print(int arr[][5], int rows, int cols)
{
 
   for (int i = 0; i < rows; i++)
   {
 
      for (int j = 0; j < cols; j++)
      {
 
         cout << arr[i][j] << " ";
 
      }
 
      cout << endl;
 
   }
 
}

int main()
{
 
   const int rows = 3;
 
   const int columns = 5;
 
   int array[rows][columns] =
   {
      { 1, 2, 3, 4, 5 }, // row 0
      { 6, 7, 8, 9, 10 }, // row 1
      { 11, 12, 13, 14, 15 } // row 2
   };

   Print(array, rows, columns);
 
   return 0;
 
}

Kết quả

1 2 3 4 5
6 7 8 9 10 
11 12 13 14 15

Chú ý:

Ví dụ trên int (*arr)[5] sẽ khác với int* arr[5];

 
void Print (int* arr[5], int rows, int cols) 
{ 
   //TODO 
} 

int arr[3][5]; 

Print (arr); // Error 

Was this article helpful?

Leave A Comment?