Search…

Con Trỏ Mảng và Mảng Các Con Trỏ

04/09/20202 min read
Phân biệt con trỏ đến mảng và mảng các con trỏ trong lập trình C/C++.

Con trỏ đến mảng là 1 con trỏ quản lý một mảng, mảng con trỏ là mảng trong đó các phần tử là các con trỏ.

Con trỏ đến 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 staticArray[10];
int *dynamicArray = new int[10];

Như cách khai báo ở trên, staticArray là mảng được cấp phát tĩnh, còn dynamicArray là mảng được cấp phát động. staticArraydynamicArray 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:

staticArray[5] = 15;

Hoặc:

*(staticArray + 5) = 15;

Mảng các con trỏ

Con trỏ cũng là một biến chứa giá trị, do đó giá trị này có thể được lưu trữ trong các phần tử của 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 **pointerArray = new int*[10];

Có thể sử dụng mảng này như một mảng hai chiều, giả sử 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 **pointerArray = new int*[m];

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

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:

pointerArray[0][0] = 0;
pointerArray[0][1] = 2;
pointerArray[0][2] = 7;
...

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

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

IO Stream Co., Ltd

30 Trinh Dinh Thao, Hoa Thanh ward, Tan Phu district, Ho Chi Minh city, Vietnam
+84 28 22 00 11 12
developer@iostream.co

383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024