Con trỏ C
Tạo con trỏ
Bạn đã học từ chương trước rằng chúng ta có thể lấy địa chỉ bộ nhớ của một biến bằng toán tử tham chiếu &
:
Ví dụ
int myAge = 43; // an int variable
printf("%d", myAge); //
Outputs the value of myAge (43)
printf("%p", &myAge); // Outputs the
memory address of myAge (0x7ffe5367e044)
Hãy tự mình thử »Con trỏ là một biến lưu trữ địa chỉ bộ nhớ của một biến khác làm giá trị của nó.
Một biến con trỏ trỏ đến một kiểu dữ liệu (như int
) cùng loại và được tạo bằng toán tử *
.
Địa chỉ của biến bạn đang làm việc được gán cho con trỏ:
Ví dụ
int myAge = 43; // An int variable
int* ptr =
&myAge; // A pointer variable, with the name ptr, that
stores the address of myAge
// Output the value of myAge (43)
printf("%d\n", myAge);
// Output
the memory address of myAge (0x7ffe5367e044)
printf("%p\n", &myAge);
//
Output the memory address of myAge with the pointer (0x7ffe5367e044)
printf("%p\n", ptr);
Hãy tự mình thử »Ví dụ giải thích
Tạo một biến con trỏ có tên ptr
, trỏ đến biến int
( myAge
). Lưu ý rằng loại con trỏ phải khớp với loại biến bạn đang làm việc ( int
trong ví dụ của chúng tôi).
Sử dụng toán tử &
để lưu trữ địa chỉ bộ nhớ của biến myAge
và gán nó cho con trỏ.
Bây giờ, ptr
giữ giá trị địa chỉ bộ nhớ của myAge
.
Dereference
Trong ví dụ trên, chúng ta đã sử dụng biến con trỏ để lấy địa chỉ bộ nhớ của một biến (được sử dụng cùng với toán tử tham chiếu &
).
Bạn cũng có thể lấy giá trị của biến mà con trỏ trỏ tới bằng cách sử dụng toán tử *
(toán tử quy chiếu ):
Ví dụ
int myAge = 43; // Variable declaration
int* ptr = &myAge; // Pointer
declaration
// Reference: Output the memory address of myAge with the
pointer (0x7ffe5367e044)
printf("%p\n", ptr);
// Dereference:
Output the value of myAge with the pointer (43)
printf("%d\n", *ptr);
Hãy tự mình thử » Lưu ý rằng dấu *
có thể gây nhầm lẫn ở đây vì nó thực hiện hai việc khác nhau trong mã của chúng ta:
- Khi được sử dụng trong khai báo (
int* ptr
), nó tạo ra một biến con trỏ . - Khi không được sử dụng trong khai báo, nó hoạt động như một toán tử quy chiếu .
Điều cần biết: Có hai cách khai báo biến con trỏ trong C:
int* myNum;
int *myNum;
Ghi chú về con trỏ
Con trỏ là một trong những điều khiến C nổi bật so với các ngôn ngữ lập trình khác, như Python và Java .
Chúng quan trọng trong C vì chúng cho phép chúng ta thao tác dữ liệu trong bộ nhớ máy tính. Điều này có thể làm giảm mã và cải thiện hiệu suất. Nếu bạn quen thuộc với các cấu trúc dữ liệu như danh sách, cây và đồ thị, bạn nên biết rằng con trỏ đặc biệt hữu ích để triển khai các cấu trúc đó. Và đôi khi bạn thậm chí phải sử dụng con trỏ, chẳng hạn như khi làm việc với các tập tin và quản lý bộ nhớ …
Nhưng hãy cẩn thận ; con trỏ phải được xử lý cẩn thận vì có thể làm hỏng dữ liệu được lưu trữ trong các địa chỉ bộ nhớ khác.