3.1.4 Dereference con trỏ

Chúng ta có thể làm gì với con trỏ không khác null và đang trỏ đến một giá trị ? Chúng ta có thể dereference nó.

Dereferencing là một hoạt động mà ở đó chúng ta sử dụng biến con trỏ để lấy ra hoặc thay đổi giá trị mà con trỏ đó trỏ đến.

Xem cách chúng ta có thể khai báo một biến kiểu int và một biến kiểu int *. Chúng ta có thể làm điều đó trong một khai báo duy nhất →

Bây giờ chúng ta gán giá trị 2 cho biến ivar

Và cho con trỏ ptr trỏ đến biến ivar


Làm thế nào để lấy ra giá trị đang được trỏ bởi con trỏ ?

Chúng ta phải sử dụng toán tử “*” nhưng trong một vai trò hoàn toàn mới – đó là dereferencer. Nếu bạn đặt một dấu sao “*” ở phía trước của một con trỏ, bạn sẽ có được một giá trị được lưu trữ tại vị trí được trỏ bởi con trỏ

* ptr

Dòng lệnh sau sẽ in ra màn hình số 2


Làm thế nào để thay đổi giá trị được trỏ bởi con trỏ ?

Nếu bạn viết một câu lệnh như thế này →

thì không phải là bạn thay đổi giá trị của con trỏ, mà bạn thay đổi giá trị được chứa tại địa chỉ mà con trỏ đang trỏ đến. Hãy chú ý điều này, nó rất quan trọng !!!!


Tổng kết lại một chút nhé.

Chúng ta đã khai báo con trỏ theo cách như sau:

ANY_TYPE *pointer;

có nghĩa là

  • pointer là một biến kiểu ANY_TYPE*
  • *pointer là giá trị của kiểu ANY_TYPE đang được trỏ bởi con trỏ pointer ==> Việc lấy giá trị thông qua con trỏ như này được gọi là dereference

Hãy lưu ý vị trí của dấu sao * trong cả 2 trường hợp. Và đừng quên rằng dereference một con trỏ NULL là không được phép và việc đó sẽ dẫn đến những lỗi nghiêm trọng.