[Basic] Mảng trong lập trình C++

Định nghĩa

Mảng là một tập hợp các phẩn tử có cùng kiểu dữ liệu được đặt liên tiếp trong bộ nhớ, ta có thể truy xuất đến từng phần tử thông qua tên mảng và chỉ số của phần tử trong mảng.

Định nghĩa mảng trong C++ theo cú pháp

kieu_du_lieu ten_mang[so_phan_tu];

Ví dụ:

int arr[10];

const int ARR_LENGTH = 5;

char name[ARR_LENGTH];

Chú ý:

  • Khi khai báo mảng ta phải khai báo số phần tử của mảng.
  • Số phần tử của mảng phải là hằng số và giá trị phải được xác định lúc compile time.

=> Vì sao mình phải nhấn mạnh giá trị hằng số phải được xác định lúc compile time, vì giá trị hằng số có thể khởi tạo lúc compile time hoăc runtime. Với mảng bộ nhớ sẽ được cấp phát lúc compile time, nếu khai bảo mảng không có số phần tử hoặc số phần tử chưa xác định lúc compile thì chương trình sẽ báo lỗi.

Ví dụ

Hợp lệ :

const int ARR_LENGTH = 5;

char name[ARR_LENGTH]; // Hợp lệ giá trị hằng xác định lúc compile

Không hợp lệ :

int n;

cout << "Enter n = ";

cin >> n;

const int val = n;

int arr[val]; // ERROR, hằng val giá trị xác định lúc runtime

Truy cập các phần tử của mảng

Để truy cập các phần tử của mảng ta sử dụng tên mảng và toán tử [].

Ví dụ:

int arr [5];

arr [0]; // Truy cập phần tử thứ nhất

arr [1]; // Truy cập phần tử thứ 2

arr [2]; // Truy cập phần tử thứ 3

arr [3]; // Truy cập phần tử thứ 4

arr [4]; // Truy cập phần tử thứ 5

Chú ý:

  • Chỉ số các phần tử của mảng bắt đầu từ 0.

Với mảng có N phần tử thì chỉ số các phần tử trong mảng từ 0 -> N-1

  • Không truy cập phần tử ngoài mảng (out of range)

Khởi tạo giá trị của mảng.

Gán giá trị cho từng phần tử của mảng

Ví dụ

int arr[5];

arr[0] = 2;

arr[1] = 5;

arr[2] = 4;

arr[3] = 10;

arr[4] = 15;

Sử dụng initial list

Ví du:

int arr[5] = {2, 5, 4, 10, 15} ;

Khi sử dụng initial list ta có thể không cẩn khai báo số phần tử của mảng, khi đó số phẩn tử của mảng bằng với số phần tử của list khởi tạo.

Ví dụ

int arr[] = {2, 3, 4}; //mảng arr có 3 phần tử

Chú ý:

  • Ta có thể khởi tạo tất cả các phần tử của mảng bằng 0

Vi dụ

int arr[5] = {}; // arr[0] = 0 ..... arr[4] = 0

Hoặc

int arr[5] = {0}; // arr[0] = 0 ..... arr[4] = 0

Truyền mảng vào hàm (function)

Khi ta truyển đối số của hàm là mảng, ta chỉ truyền vào địa chỉ của phần tử đầu tiên mảng đó. Mảng đó sẽ không được tạo ra bản sao mà hàm sẽ thao tác trực tiếp trên địa chỉ thực của mảng. Nếu trong hàm thay đổi giá trị của các phần tử trong mảng thì giá trị của mảng sau khi thực hiện hàm cũng thay đổi theo.

Ví dụ:

#include <iostream>
 
using namespace std;

void Func(int arr[])

{
 
   arr[0] = 10;
 
   arr[1] = 20;
 
   arr[2] = 30;

}

int main()

{
 
   int arr[3] = {0};
 
   cout << "Truoc khi goi ham:" << endl;
 
   cout << "arr[0] = " << arr[0] << endl;
 
   cout << "arr[1] = " << arr[1] << endl;
 
   cout << "arr[2] = " << arr[2] << endl;
 
   Func(arr);
 
   cout << "Sau khi goi ham:" << endl;
 
   cout << "arr[0] = " << arr[0] << endl;
 
   cout << "arr[1] = " << arr[1] << endl;
 
   cout << "arr[2] = " << arr[2] << endl;
 
   return 0;

}

Kết quả:

Truoc khi goi ham:
 arr[0] = 0
 arr[1] = 0
 arr[2] = 0
Sau khi goi ham:
 arr[0] = 10
 arr[1] = 20
 arr[2] = 30

Vì ta chỉ truyền vào hàm địa chỉ của phần tử đầu tiên của mảng, nên ta sẽ không xác định được kích thước và số của mảng, vì thế ta nên truyền vào hàm số phần tử của mảng.

Ví dụ:

#include <iostream>

using namespace std;

void Print(int arr[], int n)
{
 
   cout << "Sizeof : " << sizeof(arr) << endl;
   
   for (int i = 0; i < n; i++)
   { 
     
      cout << arr[i] << " ";
   
   }
 
}

int main()
{
   
   int arr[5] = {2, 3, 4, 5, 6};
 
   Print(arr, 5);
 
   return 0;

}

Kết quả:

Sizeof : 4
 2 3 4 5 6

Was this article helpful?

Có 2 bình luận

  1. Tại sao khi khai báo kích thước mảng lúc runtime chương trình vẫn chạy bình thường mà không báo lỗi

Leave A Comment?