Kiểm thử chương trình được dùng để tìm ra các lỗi đang tồn tại chứ không tìm ra được các lỗi tiềm ẩn. Edsger Wybe Dijkstra
STDIO Con trỏ mảng và mảng các con trỏ là hai khái niệm quan trọng trong C++
Nội dung bài viết

Giới thiệu

Con trỏ mảng con trỏ quản lý một mảng, còn mảng con trỏ là mảng trong đó các phần tử là các con trỏ. Phân biệt và sử dụng hai khái niệm này sẽ giúp cho lập trình viên hiểu được vấn đề tốt hơn, từ đó giải quyết bài toán của mình dễ dàng hơn.

Tiền đề bài viết

Bài viết nằm trong loạt bài viết trong chương Con trỏ của chương trình LẬP TRÌNH C++.

Đối tượng hướng đến

Các lập trình viên C++ đang tìm hiểu về con trỏ, có kiến thức về con trỏ và cấp phát động.

Con trỏ mảng

Đây là con trỏ quản lý vùng nhớ của mảng, cả mảng tĩnh và mảng động đều có con trỏ mảng.

int Static_Array[10];
int *Dynamic_Array = new int[10];

Như cách khai báo ở trên, thì Static_Array là mảng tĩnh, còn Dynamic_Array là mảng động. Static_Array và Dynamic_Array cũng chính là tên của con trỏ quản lý vùng nhớ của các mảng. Địa chỉ mà hai con trỏ này lưu trữ chính là địa chỉ của phần tử đầu tiên trong mảng.

Khi muốn sử dụng vùng nhớ của các phần tử khác trong mảng, ví dụ như phần tử thứ 6 ta có 2 cách sau:

Cách thông thường:

Static_Array[5]  = 15;

Hoặc:

*(Static_Array + 5) = 15;

Mảng các con trỏ

Con trỏ cũng là một biến, do đó nó có thể được lưu trữ trong các mảng. Mảng này được gọi là mảng con trỏ.

Khai báo cấp phát động như sau:

int **Pointer_Array = new int*[10];

Chúng ta có thể sử dụng mảng này như một mảng hai chiều, để làm được điều đó, chúng ta làm như sau, giả sử chúng ta cần tạo một mảng 2 chiều có kích thước m x n:

int m = 10, n = 5;
int **Pointer_Array = new int*[m];

for (int i = 0; i < m; i++)
{
	Pointer_Array[i] = new int[n];
}

Chúng ta có thể sử dụng các phần tử của mảng như một mảng 2 chiều tĩnh thông thường:

Pointer_Array[0][0] = 0;
Pointer_Array[0][1] = 2;
Pointer_Array[0][2] = 7;
……

Khi không có nhu cầu sử dụng mảng này nữa, chúng ta phải giải phóng vùng nhớ cho nó:

for (int i = 0; i < m; i++)
{
	delete[] Pointer_Array[i];
}
delete[] Pointer_Array;

Bạn cần hỗ trợ các dự án kết nối không dây?

Quí doanh nghiệp, cá nhân cần hỗ trợ, hợp tác các dự án IoT, kết nối không dây. Vui lòng liên hệ, hoặc gọi trực tiếp 0942.111912.

  • TỪ KHÓA
  • Arduino
  • ESP32
  • ESP8266
  • Wifi
  • Bluetooth
  • Zigbee
  • Raspberry Pi
THẢO LUẬN
ĐÓNG