Tìm hiểu về Pointer (Phần 1)
Bài đăng này đã không được cập nhật trong 5 năm
Giới Thiệu
Từ trước đến nay khi khai báo 1 biến, thông thường chúng ta sẽ quan tâm đến GIÁ TRỊ của biến đó.
Ví Dụ
Trong đoạn code trên, ta cần tính tổng của x và y. Như vậy cái mà ta quan tâm là GIÁ TRỊ của biến x, biến y và biến tổng.
Ngoài ra ta không cần quan tâm cái gì khác. Thông thường khi học các ngôn ngữ lập trình ta đều nghĩ như vậy.
Tuy nhiên trong ngôn ngữ C/C++, nó chuyên sâu hơn. Bạn nên nhớ 1 điều quan trọng:
Một biến có 2 tính chất :
- Giá Trị.
- Địa chỉ của biến đó.
Từ xưa đến nay ta 99.99% quan tâm tính chất đầu tiên mà bỏ sót tính chất thứ 2: ĐỊA CHỈ của biến.
Bạn thử nhớ lại lệnh scanf xem.
Toán tử & có tác dụng lấy địa chỉ của biến. Vì vậy mà &x sẽ trả về địa chỉ của biến x.
Lệnh scanf nhận vào ĐỊA CHỈ của biến x.
Bây giờ ta xem thử địa chỉ của biến có giá trị là bao nhiêu ?
Chạy thử chương trình:
Poniter (Con trỏ)
Chạy thử chương trình:
Bạn có thấy điều gì không ??? p là biến có kiểu dữ liệu int*.
Ta gán p = &x, điều này có nghĩa là gì ?
Ta đang có nhu cầu dùng biến p để LƯU ĐỊA CHỈ của biến x.
Vì vậy nên: giá trị của p cũng chính là địa chỉ của biến x.
Ta nói rằng: p là con trỏ. Đó là lý do con trỏ ra đời: con trỏ giúp lưu trữ địa chỉ của biến, mở
rộng ra là nó lưu trữ địa chỉ trên bộ nhớ RAM.
Vậy con trỏ dùng để làm gì ???????
Chạy thử chương trình:
Rõ ràng ta đâu có câu lệnh gán x = 21 nào đâu, nhưng tại sao vẫn in ra x = 21 thế ?
Câu lệnh *p = 21 hoàn toàn tương đương lệnh gán x = 21.
Thông qua con trỏ p, bạn đã gián tiếp thay đổi giá trị của x.
Có được con trỏ p, bạn có thể gián tiếp điều khiển biến x.
Không cần biết chủ nhà là ai, chỉ cần biết địa chỉ của căn nhà là bạn tùy ý quyết định số
phận căn nhà, biết được địa chỉ nhà thì bạn có thể đập phá nó, xây thêm 1 tầng nữa, lấy
hết tất cả đồ đạc của căn nhà luôn cũng được.
- Hack game
- Các chỉ số máu HP, năng lượng mana, sức mạnh, tiền của nhân vật đều được lưu
trữ bởi các biến trong bộ nhớ.
- Biết được địa chỉ của các biến đó gián tiếp thay đổi giá trị thông qua con trỏ có thể hack được game.
Hi vọng thông qua ví dụ nhỏ này sẽ giúp bạn trong công việc cũng như học tập.Chúc may mắn.
All rights reserved