Mảng trong C++
Mảng là gì?
Giả sử cần lưu thông tin điểm số của 100 học sinh và việc khai báo 100 biến tên student1
, student2
, student3
, ... student100
để làm việc này rất tốn thời gian. C++ cung cấp 1 cấu trúc dữ liệu để làm được việc này một cách hiệu quả, đó là sử dụng mảng.
1 mảng là một chuỗi hữu hạn các phần tử có cùng kiểu dữ liệu được lưu trữ tại các vùng nhớ liên tiếp nhau, mỗi phần tử được xác định bằng một chỉ số - số thứ tự của nó trong mảng.
![](https://resources.stdio.vn/content/article/5ef62368d3f3166aaf3e3a92/resources/res-1599216731-1599216731361.png)
Ví dụ: Mảng a
có 4 phần tử - 4 giá trị int
được lưu trữ liên tiếp nhau có thứ tự từ 0 – 3 như hình trên.
Lưu ý: chỉ số của mảng trong C++ bắt đầu từ 0.
Kích thước của mảng
Vì mảng là tập hợp các phần tử cùng kiểu dữ liệu nên kích thước của nó là tổng kích thước của tất cả các phần tử trong nó.
Ví dụ: mảng a
ở trên có 4 phần tử int
, mỗi phần tử int
chiếm 4 bytes trên bộ nhớ, nên kích thước của a
sẽ là 4 * 4 = 16 bytes. Nếu đây là mảng các phần tử short
- chiếm 2 bytes trên bộ nhớ thì kích thước mảng a
chỉ là 4 * 2 = 8 bytes.
Có thể dễ dàng xác định kích thước của mảng a
bằng cách sử dụng: sizeof(a)
Truy xuất phần tử mảng
Mỗi phần tử mảng có 1 chỉ số để xác định, sử dụng chỉ số này truy xuất đến các phần tử này. Có 2 cách cơ bản như sau:
tên_mảng[chỉ_số]
: như trong ví dụ trên làa[0]
,a[1]
,a[2]
, ...*(tên_mảng + chỉ số)
: như trong ví dụ trên là*(a + 0)
,*(a + 1)
,*(a + 2)
, ...
Thật ra, khi sử dụng a[0]
, trình biên dịch sẽ thực hiện phép cộng a + 0
, sau đó mới lấy giá trị tại địa chỉ a + 0
qua *(a + 0)
. Vậy nếu sử dụng 0[a]
, trình biên dịch cũng thực hiện 0 + a
và lấy giá trị tại địa chỉ này qua *(0 + a)
, kết quả là như nhau, vậy cũng có thể sử dụng 0[a]
, 1[a]
, 2[a]
, ... để truy xuất các phần tử của mảng.