06/04/2021, 14:47

Cách khai báo mảng trong C++ (mảng một chiều và nhiều chiều) - Học C++ căn bản và nâng cao

Trong bài này mình sẽ hướng dẫn cách khai báo mảng trong C++, đó là khai báo mảng một chiều và khai báo mảng nhiều chiều trong C++. Ở các bài học trước chúng ta đã cùng tìm hiểu về biến được dùng để lưu trữ giá trị trong bộ nhớ. Giả sử chúng ta cần lưu trữ 1000 số nguyên trong bộ nhớ, thì chúng ...

Trong bài này mình sẽ hướng dẫn cách khai báo mảng trong C++, đó là khai báo mảng một chiều và khai báo mảng nhiều chiều trong C++.

Ở các bài học trước chúng ta đã cùng tìm hiểu về biến được dùng để lưu trữ giá trị trong bộ nhớ. Giả sử chúng ta cần lưu trữ 1000 số nguyên trong bộ nhớ, thì chúng ta sẽ khai báo đúng 1000 tên biến khác nhau. Điều này rất là kinh khủng, chúng ta phải suy nghĩ làm sao cho 1000 tên biến phải có nghĩa, chương trình của chúng ta sẽ trở nên rất dài và nhìn rất lộn xộn.

Trong C++ hổ trợ cấu trúc mảng giúp chúng ta giải quyết khó khăn trên, chỉ cần khai báo 1 mảng có 1000 phần tử là được. Và trước khi tìm hiểu về cách khai báo mảng trong C++ thì hãy cùng mình lướt qua một chút về ưu điểm và nhược điểm khi sử dụng mảng đã nhé.

1. Ưu và nhược điểm của mảng trong C++

Cũng như các ngôn ngữ lập trình khác, mảng trong C++ là tập hợp các phần tử cùng kiểu liên tiếp nhau trong bộ nhớ.

Mảng trong C++ có độ dài cố định, được đánh theo chỉ số từ 0 đến độ dài mảng -1. Như hình dưới đây:

one 2Bdimension 2Barray jpg

Ưu điểm

  • Truy xuất phần tử mảng ngẩu nhiên, dựa vào chỉ số (index) của mảng.
  • Tối ưu code (chương trình chúng ta sẽ ít code hơn).
  • Dễ dàng duyệt qua từng phần tử mảng.
  • Dễ dàng thao tác dữ liệu.
  • Dễ dàng sắp xếp dữ liệu.

Nhược điểm

  • Mảng có độ dài cố định.

Trong C++ có 2 loại mảng đó là mảng một chiều và mảng nhiều chiều. Tuy nhiên trong phạm vi bài này mình chỉ hướng dẫn các nội dung gồm:

  • Khai báo mảng C++ môt chiều
  • Khai báo mảng C++ hai chiều

2. Cách khai báo mảng một chiều trong C++

Mình đã có một bài viết về cấu trúc mảng trong C++, trong bài đó mình đã hướng dẫn cách khai báo mảng một chiều rồi. Tuy nhiên, để bạn dễ theo dõi và so sánh với mảng nhiều chiều thì mình sẽ nhắc lại một chút nhé.

Khai báo mảng một chiều

Để khai báo một mảng một chiều trong C++, chúng ta cần chỉ rõ kiểu dữ liệu của mảng, tên mảng và số lượng phần tử của mảng. Cú pháp khai báo mảng một chiều trong C++ như sau:

Cú pháp
KieuDuLieu TenMang[KichCo];

Kích cở của mảng phải là một số nguyên lớn hơn 0, còn kiều dữ liệu có thể là bất cứ kiểu dữ liệu nào trong C++. Ví dụ chúng ta có mảng số nguyên gồm 1000 phần tử sẽ được khai báo như sau:

int Diem[1000];

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

Trong C++ cho phép chúng ta khởi tạo giá trị cho các phần tử mảng như sau:

int Diem[7] = {2, 9, 8, 9, 1, 10, 5};

Hoặc

int Diem[7] = {2, 9, 8};

Số phần tử ở giữa 2 dấu {} không được lớn hơn số phần tử được khai báo trong dấu [].

Chúng ta cũng có thể khởi tạo giá trị cho mảng bằng cách bỏ qua kích cở của mảng như sau:

int Diem[] = {3, 5, 8, 9, 1, 5, 7, 3};

Chúng ta cũng có thể khởi tạo giá trị cho từng phần tử một trong mảng. Ví dụ chúng ta khởi tạo giá trị cho phần tử thứ 4.

int Diem[5]; //Khai bao mang so nguyen gom co 5 phan tu
Diem[3]= 8; //Khoi tao gia tri cho phan tu thu 4 la 8

Bởi vì mảng có chỉ số (index) bắt đầu bằng 0 nên phần tử thứ 4 sẽ có chỉ số (index) là 3.

Truy xuất các phần tử mảng một chiều

Chúng ta có thể truy xuất giá trị của bất kỳ phần tử nào trong mảng bằng cách gọi tên mảng và chỉ số (index). Cú pháp như sau:

TenMang[index]

Ví dụ ta có mảng Diem gồm 10 phần tử như sau:

 int Diem[10] = {1, 3, 4, 5, 6, 1, 9, 4, 10, 5};

Chúng ta sẽ lấy giá trị của phần tử thứ 3, thứ 6, thứ 10 lần lượt như sau:

Ví dụ
#include <iostream>  
using namespace std;  
int main()  
{  

   int Diem[10] = {1, 3, 4, 5, 6, 1, 9, 4, 10, 5};
   int a3 = Diem[2];
   cout << "Phan tu thu 3 = " << a3 << endl;
   int a6 = Diem[6];
   cout << "Phan tu thu 6 = " << a6 << endl;
   int a10 = Diem[9];
   cout << "Phan tu thu 10 = " << a10 << endl;
}  

Kết quả của chương trình trên là:

array ex1 JPG

Chúng ta muốn truy xuất lần lượt tất cả các phần tử của mảng chúng ta có thể sử dụng vòng lặp trong c++ như while, for, do while. Bắt đầu từ 0 đến kích cở mảng -1.

Ví dụ mảng một chiều

Chúng ta cùng xem một ví dụ đơn giản về mảng một chiều trong C++ như sau:

Ví dụ
#include <iostream>  
using namespace std;  
int main()  
{  
    int arr[8] = {3, 5, 1, 3, 5, 6, 8, 12}; 
    cout << "Danh sach cac phan tu cua mang arr nhu sau: " << endl;
    for (int i = 0; i < 8; i++)    
    {    
            cout << "   arr[" << i + 1 << "] = " << arr[i] << endl;    
    }    
}  

Và kết quả sau khi thực thi đoạn code trên:

array ex JPG

Chúng ta thử truy xuất phần tử ở ngoài phạm vi khai báo của mảng như sau:

Ví dụ
#include <iostream>  
using namespace std;  
int main()  
{  
   int Diem[10] = {1, 3, 4, 5, 6, 1, 9, 4, 10, 5};
   int a11 = Diem[10];
   cout << "Phan tu thu 11 = " << a11 << endl;
   int a = Diem[-5];
   cout << "Phan tu thu -1 = " << a << endl;
}  

Và kết quả sau khi thực thi đoạn code trên:

ex array out bound JPG

Như vậy trong C++ không có báo lỗi biên dịch khi truy xuất phần tử mảng ra khỏi phạm vi khai báo của mảng, tuy nhiên khi thực thi thì kết quả không như chúng ta mong đợi.

3. Cách khai báo mảng nhiều chiều trong C++

Cũng giống như mảng một chiều, mảng nhiều chiều cũng bao gồm nhiều phần tử, tuy nhiên mỗi phần tử là một mảng 1 chiều. Và trong phạm vi bài học này chúng ta chỉ tìm hiểu đến mảng hai chiều thôi nhé, vì việc xử lý mảng 3 hay 4 chiều là rất phức tạp.

Cú pháp mảng nhiều chiều

Cú pháp của mảng nhiều chiều trong C++ như sau:

Cú pháp
type name[size1][size2]...[sizeN];

Ví dụ chúng ta có mảng 4 chiều có các kích cở lần lượt là 3, 4, 2, 7 sẽ được khai báo như sau:

int ToaDo[3][4][2][7]

4. Cách khai báo mảng hai chiều trong C++

Trong bài học hôm nay chúng ta chỉ tìm hiểu mảng 2 chiều trong C++ thôi nhé. Mảng nhiều hơn 2 chiều thực tế rất ít sử dụng, các bạn có thể tìm hiểu thêm trên mạng nhé.

Khai báo mảng 2 chiều

Cấu trúc của mảng 2 chiều giống như một ma trận, nó có chiều dài và chiều rông, và số phần tử của mảng chính là tích của chiều dài nhân với chiều rộng.

Mảng 2 chiều là một hình thức đơn giản nhất của mảng nhiều chiều, bản chất của mảng 2 chiều là 2 mảng 1 chiều.

Mảng 2 chiều trong C++ được khai báo theo cú pháp như sau:

Cú pháp
KieuDuLieu  TenMang[kichco1][kichco2];

Trong đó:

  • KieuDuLieu: Là kiểu dữ liệu của phần tử trong mảng, kiểu dữ liệu có thể là một trong các kiểu dữ liệu được hổ trợ trong C++.
  • TenMang: Là tên hợp lệ trong C++.

Giả sử chúng ta có mảng a có 3 dòng và 4 cột được minh họa như hình dưới đây:

two dimensional arrays jpg

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

Giả sử chúng ta khỏi tạo giá trị cho mảng a có 3 dòng và 4 cột như sau:

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

Hoặc chúng ta cũng có thể khởi tạo giá trị trên như sau:

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

Truy xuất phần tử mảng hai chiều

Trong C++, để truy xuất phần tử mảng thông qua chỉ số của dòng và chỉ số của cột như sau:

int test = a[2][3];

Ví dụ mảng hai chiều

Chúng ta cùng xem xét một ví dụ đơn giản về mảng 2 chiều trong C++ như sau:

Ví dụ
#include <iostream>
using namespace std;
 
int main () {
   int a[3][2] = { {0,0}, {2,2}, {5,5}}; //khai bao va khoi tao gia tri cho mang a gom 3 dong va 2 cot
   
   cout << "Danh sach cac phan tu trong mang a nhu sau: " << endl;
 
   // Duyet qua tung phan tu cua mang a
   for ( int i = 0; i < 3; i++ ) {
      for ( int j = 0; j < 2; j++ ) {
         cout << "   a[" << i << "][" << j << "] =  " << a[i][j] << endl;
      }
   }
 
   return 0;
}

Và kết quả sau khi thực thi đoạn code trên như sau:

array multi ex JPG

5. Kết luận

Như vậy là chúng ta đã tìm hiểu xong về cách khai báo mảng trong C++ rồi. Trong bài này chúng ta chỉ cần nhớ cách khai báo mảng, khởi tạo giá trị cho phần tử mảng và truy xuất phần tử mảng như thế nào. Vì màng trong C++ rất thường xuyên được sử dụng, các bạn nhớ ghi nhớ nhé.

Vậy chúng ta kết thúc bài học này ở đây. Bài học tiếp theo chúng ta sẽ cùng tìm hiểu về mảng được sử dụng như là tham số của hàm. Các bạn nhớ theo dõi nhé.

Trần Trung Dũng

15 chủ đề

2610 bài viết

Cùng chủ đề
0