Ý tưởng của việc này là bạn có 1 con trỏ, bạn muốn cấp phát tài nguyên cho nó thông qua một hàm.
Ở đây ta có ví dụ:
int *a;
Ta đã có con trỏ a, làm sao để giữ được giá trị của con trỏ sau khi cấp phát?
Có thể thấy ta không thể truyền tham trị vào hàm, vì sau khi kết thúc hàm giá trị con trỏ không được lưu giữ.
Có 2 cách giải quyết cho trường hợp này
Ta sẽ truyền một biến tham chiếu của con trỏ vào hàm. Sau khi cấp phát, giá trị con trỏ vẫn được lưu giữ. Lưu ý biến tham chiếu đến con trỏ cấp 1 là *&a, con trỏ cấp 2 là **&a, tức dấu & luôn ở gần tên biến.
Ví dụ:
void Alloc(int *&a, int n)
{
a = new int[n];
}
Trong ví dụ này ta sẽ truyền vào con trỏ cấp 2. Con trỏ cấp 2 trỏ đến con trỏ cấp 1. Vì vậy, nếu bạn muốn có mảng n chiều thì có thể truyền vào con trỏ cấp n+1.
Ví dụ:
void Alloc(int **a, int n)
{
*a = new int[n];
}
Ở đây *a là dữ liệu mà con trỏ cấp 2 đang trỏ tới, giá trị của *a bị thay đổi vẫn được lưu lại.
#Vấn #đề #cấp #phát #động #trong #hàm



![[👨💻🇻🇳] Vấn đề cấp phát động trong hàm [👨💻🇻🇳] Vấn đề cấp phát động trong hàm](https://i3.wp.com/gochocit.com/wp-content/uploads/2021/09/dia-chi-con-tro-cap-phat-dong.png?resize=9999,350&ssl=1)
![[👨💻🇻🇳] Quy tắc chuyển sang thể て (-te) của động từ tiếng Nhật [👨💻🇻🇳] Quy tắc chuyển sang thể て (-te) của động từ tiếng Nhật](https://top1brand.top1index-top1list.com/wp-content/themes/rehub-theme/images/default/noimage_70_70.png)
![[👨💻🇻🇳] Tại sao cần xóa bộ đệm bàn phím trước khi nhập chuỗi trong C/C++? [👨💻🇻🇳] Tại sao cần xóa bộ đệm bàn phím trước khi nhập chuỗi trong C/C++?](https://i2.wp.com/3.bp.blogspot.com/-P5_D_IIXd-c/WeNXKEQBM-I/AAAAAAAAASc/T2awgyVOTmsrPqga11ZE5RS1LFeBPsxRwCPcBGAYYCw/s1600/cpp.png?ssl=1)
