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. staticArray
và dynamicArray
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;