# Ôn tập về con trỏ trong C++ ## Trình bày: Lê Minh Trí ## Ghi nhớ > - Miền giá trị của một biến con trỏ là địa chỉ ô nhớ. - **Cú pháp khai báo một con trỏ:** > - KDL *<tên biến>; - **Ví dụ:** ```cpp= // a là biến con trỏ kiểu số nguyên. // Miền giá trị của a là đại chỉ ô nhớ. int *a; ``` - **Cách dùng con trỏ:** - **Có 2 cách:** - **Cách 1:** Sử dụng con trỏ để giữ địa chỉ một biến. - **Cách 2:** Sử dụng con trỏ để xin cấp phát và thu hồi bộ nhớ. - **Toán tử làm việc với con trỏ:** - **Có 2 toán tử:** - **Toán tử ***"&"*** (address-of operator):** dùng để lấy địa chỉ của một biến. - **Toán tử** **"*"** **(dereference operator):** dùng để lấy giá trị hoặc cập nhật lại giá trị tại địa chỉ mà biến con trỏ đang giữ. - **Cấp phát và thu hồi bộ nhớ:** - **Cấp phát:** Để cấp phát bộ nhớ cho một biến con trỏ ta có thể sử dụng các hàm: **calloc, malloc, realloc** hoặc toán tử **new**. - **Thu hồi:** Thu hồi bộ nhớ của biến con trỏ bằng hàm **free** hoặc toán tử **delete**. - **Lưu ý:** Khi cấp phát bộ nhớ cho 1 biến con trỏ bằng toán tử **new** thì khi thu hồi bộ nhớ ta bắt buộc dùng toán tử **delete**. - **Con trỏ cấu trúc:** > - Để truy xuất đến một thành phần của biến con trỏ cấu trúc ta sử dụng toán tử mũi tên **"->"**. - **Ví dụ cho dùng con trỏ để giữ địa chỉ của một biến hoặc mảng:** ```cpp= // Khởi tạo biến con trỏ a có kiểu số nguyên. int *a; // Khởi tạo biến p có kiểu số nguyên. int p; // Khởi tạo mảng số nguyên p có 100 phần tử. int b[100]; // Con trỏ a trỏ đến địa chỉ ô nhớ của biến p. a = &p; // Con trỏ a trỏ đến địa chỉ ô nhớ đầu tiên của mảng b (b[0]). a = &b; ``` - **Ví dụ cho dùng con trỏ cấp phát và thu hồi bộ nhớ:** ```cpp= // Khởi tạo biến con trỏ a có kiểu số nguyên và kích thức gấp 2 lần kiểu số nguyên. int *a = new int[2]; // Thu hồi bộ nhớ của biến con trỏ a sau khi sử dụng xong: delete []a; //Khởi tạo biến con trỏ a có kiểu số nguyên và có giá trị tức thời là 2. int *a = new int(2); //Thu hồi bộ nhớ của biến con trỏ a sau khi sử dụng xong: delete a; ``` - **Ví dụ truy cập một thành phần của biến con trỏ cấu trúc:** ```cpp= //Khởi tạo kiểu cấu trúc con trỏ có 1 thành phần là biến kiểu số nguyên a. struct ConTro { int a; }; //Định nghĩa kiểu ConTro. typedef struct ConTro CT; int main() { //Khởi tạo biến con trỏ ct có kiểu là ConTro. CT *ct; //Truy cập thành phần *a của biến con trỏ ct bằng cách: *ct->a = 6; return 0; } ```