Con trỏ (pointer) trong C

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++

2. Sử dụng con trỏ trong C++

3. Địa chỉ (address) trong C++

4. Biến con trỏ trong C++

5. Khai báo con trỏ trong C++

6. Toán tử được sử dụng trong con trỏ

7. Ví dụ về con trỏ trong C++

8. Một số lỗi thường gặp khi làm việc với con trỏ trong C++

 

 

1. Con trỏ (pointer) 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.

 

2. Sử dụng con trỏ trong C++

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.

 

3. Địa chỉ (address) trong C++

Để 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.

 

4. Biến con trỏ trong C++

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.

 

5. Khai báo con trỏ trong 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

 

6. Toán tử được sử dụng trong con trỏ

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ỏ.

 

7. Ví dụ về con trỏ trong C++

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

 

8. Một số lỗi thường gặp khi làm việc với con trỏ trong C++

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ể.

Con trỏ (pointer) trong ngôn ngữ lập trình C++ cũng là một biến, nó còn được gọi là bộ định vị hoặc chỉ báo đến địa chỉ của một giá trị. Trong bài học C++ dưới đây Taimienphi.vn sẽ giới thiệu cho bạn chi tiết về con trỏ (pointer) trong C++.
Mảng (array) trong C (phần 3)
Chuỗi (string) trong C
Input và Output trong C
Cấu trúc dữ liệu trong C
Phạm vi biến trong C
Lệnh điều kiện trong C

ĐỌC NHIỀU