Khác với con trỏ trong các ngôn ngữ lập trình khác như Java hay Python, trong C++, con trỏ được sử dụng để truy cập bộ nhớ và thao tác địa chỉ.
Để tìm hiểu rõ hơn về con trỏ (pointer) trong C++, bạn đọc tham khảo tiếp bài viết dưới đây của Taimienphi.vn.
Mục Lục bài viết:
1. Con trỏ (pointer) trong C++
3. Địa chỉ (address) trong C++
- Con trỏ được sử dụng để truy xuất chuỗi, cây, ... và được sử dụng với mảng, cấu trúc và hàm.
- Chúng ta có thể trả về nhiều giá trị từ hàm bằng cách sử dụng con trỏ.
- Cho phép truy cập vị trí bộ nhớ bất kỳ trong bộ nhớ máy tính.
Trong C++, chúng ta có nhiều cách để sử dụng con trỏ:
- Cấp phát bộ nhớ động: Trong C++, chúng ta có thể phân bổ bộ nhớ động bằng cách sử dụng các hàm malloc () và calloc () mà trong đó con trỏ được sử dụng.
- Mảng, hàm và cấu trúc: Con trỏ trong ngôn ngữ C++ được sử dụng rộng rãi trong mảng, hàm và cấu trúc, giúp giảm bớt các mã và cải thiện hiệu suất.
Để tìm hiểu về con trỏ, trước hết chúng ta cùng tìm hiểu cách lưu trữ dữ liệu trên máy tính như thế nào.
Mỗi biến mà bạn tạo trong chương trình sẽ được gán một vị trí trong bộ nhớ máy tính. Giá trị lưu trữ biến thực sự được lưu trữ ở vị trí được chỉ định.
Để biết vị trí dữ liệu được lưu trữ, C++ cung cấp toán tử & (tham chiếu), cung cấp cho bạn địa chỉ một biến. Nếu var là biến thì &var cung cấp địa chỉ của biến đó.
- Ví dụ: Cho ví dụ về địa chỉ trong C++:
#include
sử dụng namespace std;
int main()
{
int var1 = 3;
int var2 = 24;
int var3 = 17;
cout < &var1=""><>
cout < &var2=""><>
cout < &var3=""><>
}
Đầu ra có dạng:
0x7fff5fbff8ac
0x7fff5fbff8a8
0x7fff5fbff8a4
Lưu ý:
- Đầu ra trên hệ thống của bạn có thể không giống như đầu ra ở trên.
- 0x ở đầu biểu thị địa chỉ ở dạng cơ số 16 (hexadecimal).
- Ngoài ra địa chỉ thứ nhất khác với địa chỉ thứ hai 4 byte và địa chỉ thứ hai khác với thứ ba 4 byte. Điều này là do kích thước của số nguyên (biến kiểu int) là 4 byte trong hệ thống 64 bit.
C++ cho phép người dùng thao tác trực tiếp dữ liệu trong bộ nhớ máy tính. Bạn có thể gán và hủy gán khoảng trống bất kỳ trong bộ nhớ theo ý muốn. Để làm được điều này, chúng ta sử dụng biến con trỏ.
Biến con trỏ là các biến trỏ đến một địa chỉ cụ thể trong bộ nhớ được trỏ bởi một biến khác.
Trong C++, con trỏ được khai báo bằng cách sử dụng * (ký hiệu dấu hoa thị).
int ∗ a; // con trỏ tới int
char ∗ c; // con trỏ tới char
Dưới đây là bảng danh sách các toán tử được sử dụng trong con trỏ trong C++:
Biểu tượng Tên Mô tả
& Toán tử Address Cung cấp địa chỉ của một biến.
∗ Toán tử Indirection Lấy giá trị của một địa chỉ.
Trong đó, toán tử tham chiếu (&) được sử dụng để cung cấp địa chỉ của một biến. Để lấy giá trị được lưu trữ trong địa chỉ bộ nhớ, chúng ta sử dụng toán tử (*).
Ví dụ, nếu biến kiểu số được lưu trữ trong địa chỉ bộ nhớ 0x123 và nó chứa giá trị là 5. Toán tử tham chiếu (&) cung cấp giá trị 0x123, còn toán tử trỏ đến (*) cho giá trị 5.
Lưu ý: Dấu (*) đượcsử dụng trong khai báo con trỏ C++ không phải là con trỏ đến. Nó chỉ là một ký hiệu tương tự để tạo ra một con trỏ.
Ví dụ 1:
Dưới đây là ví dụ đơn giản về sử dụng con trỏ in địa chỉ và giá trị:
#include
Sử dụng namespace std;
int main()
{
int number=30;
int ∗ p;
p=&number;//lưu trữ địa chỉ của biến number
cout<">{C}{C}{C}{C}{C}<><>
cout<"địa><><>
cout<">{C}{C}{C}{C}{C}<><>
trả về 0;
}
Đầu ra có dạng:
Địa chỉ của biến number là:0x7ffccc8724c4
Địa chỉ của biến p là:0x7ffccc8724c4
Giá trị của biến p là:30
Ví dụ 2:
Trong ví dụ dưới đây, con trỏ hoán đổi 2 number mà không sử dụng biến thứ 3:
#include
sử dụng namespace std;
int main()
{
int a=20,b=10,∗p1=&a,∗p2=&b;
cout<"trước><>
∗p1=∗p1+∗p2;
∗p2=∗p1-∗p2;
∗p1=∗p1-∗p2;
cout<"><>
trả về 0;
}
Đầu ra có dạng:
Trước khi hoán đổi: ∗p1=20 ∗p2=10
Sau khi hoán đổi: ∗p1=10 ∗p2=20
Giả sử, nếun muốn con trỏ pc trỏ đến địa chỉ của c. Sau đó:
int c, *pc;
pc=c; /* Sai! pc là địa chỉ còn c không phải địa chỉ. */
*pc=&c; /* Sai! * pc là giá trị được chỉ theo địa chỉ, còn %amp;c là một địa chỉ. */
pc=&c; /* Đúng! pc là địa chỉ, %amp;pc cũng là địa chỉ. */
*pc=c; /* Đúng! *pc là giá trị được chỉ theo địa chỉ, c là giá trị. */
Trong cả hai trường hợp, con trỏ pc không trỏ đến địa chỉ của c.
Bài viết trên đây Taimienphi.vn vừa giới thiệu cho bạn về con trỏ (pointer) trong C++. Trong các bài viết tiếp theo, Taimienphi.vn sẽ giới thiệu tiếp cho bạn về tham chiếu trong C++ là gì, vấn đề tham chiếu trong C cũng được nhiều bạn lập trình quan tâm, bài viết sẽ có các ví dụ và phân tích cụ thể.
">"trước>">"địa>">