Chuyển đến nội dung chính
Mô-đun 5 · Bài học 2 trong tổng số 212/18 trong khóa học~15 min
Bài học theo mô-đun (2/2)

Con trỏ

Con trỏ là một trong những tính năng mạnh mẽ và đặc biệt nhất của C++. Chúng cho phép bạn truy cập trực tiếp vào bộ nhớ vật lý của máy tính, cho phép quản lý tài nguyên hiệu quả và hiệu suất cao.


1. Bộ nhớ và Địa chỉ là gì?

Mọi biến bạn khai báo trong chương trình đều được lưu trữ trong một ô của bộ nhớ RAM. Mỗi ô có một địa chỉ bộ nhớ duy nhất (thường được biểu thị ở định dạng thập lục phân, ví dụ: 0x7ffee3bf87ac).

C++ cho phép chúng ta lấy địa chỉ bộ nhớ của bất kỳ biến nào bằng cách sử dụng địa chỉ của toán tử &:

C++
int x = 42;
std::cout << &x; // Prints the memory address of x (e.g., 0x7ffee3bf87ac)

2. Định nghĩa con trỏ

Con trỏ là một biến đặc biệt lưu trữ địa chỉ bộ nhớ của một biến khác làm giá trị của nó.

Cú pháp yêu cầu sử dụng dấu hoa thị * sau kiểu dữ liệu:

C++
int x = 42;
int* ptr = &x; // ptr is a pointer to an integer that contains the address of x

3. Toán tử quy định (*)

Để truy cập hoặc sửa đổi giá trị được lưu trữ tại địa chỉ mà con trỏ trỏ tới, chúng ta sử dụng toán tử quy chiếu (hoặc toán tử gián tiếp), cũng được biểu thị bằng ký hiệu *:

C++
int x = 42;
int* ptr = &x;

std::cout << *ptr; // Prints 42 (the value ptr points to)

*ptr = 100; // Modifies the value of x through the pointer
std::cout << x;    // Now prints 100!

4. Con trỏ rỗng: nullptr

Một con trỏ không trỏ đến bất kỳ địa chỉ hợp lệ nào phải được khởi tạo bằng từ khóa nullptr (được giới thiệu trong C++ 11):

C++
int* ptr = nullptr; // Safe null pointer

Hãy tự mình thử

tập thể dục#cpp.m5.l2.e1
Nỗ lực: 0Đang tải…

Trong main, có một giá trị biến số nguyên được khởi tạo là 42. Khai báo một con trỏ tới số nguyên ptr trỏ đến địa chỉ của giá trị. Sử dụng tính năng hủy tham chiếu của ptr để đặt giá trị của giá trị thành 100 và cuối cùng in giá trị bằng std::cout.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Khai báo con trỏ bằng `int* ptr = &value;`, sửa đổi giá trị bằng cách hủy tham chiếu `*ptr = 100;`, và in `std::cout << value;`.

Giải pháp khả dụng sau 3 lần thử

tập thể dục#cpp.m5.l2.e2
Nỗ lực: 0Đang tải…

Xác định hàm doubleValue chấp nhận một con trỏ tới một số nguyên (int* ptr) và nhân giá trị mà nó trỏ tới với 2 (nếu con trỏ không rỗng). Trong main, gọi doubleValue truyền địa chỉ của biến num và in nó.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Hàm phải chấp nhận `int* ptr`. Bên trong, sử dụng `*ptr = (_ptr) _ 2`. Trong main gọi nó bằng `doubleValue(&num);`.

Giải pháp khả dụng sau 3 lần thử

Quiz#cpp.m5.l2.q1
Sẵn sàng

Với mã được cung cấp, biểu thức nào cho phép bạn sửa đổi trực tiếp giá trị của a, đặt nó thành 10?

C++
int a = 5;
int* p = &a;
// quale istruzione assegna 10 ad a?
Tùy chọn trả lời