Xin chào các bạn! Mình đang nhập môn C và không hiểu phần Pointer. Các bạn có thể giải thích cho mình ý nghĩa cũng như tính chất của Pointer được không? Pointer khác các biến bình thường (Variables) ở điểm nào và những lợi thế khi dùng Pointer? Cám ơn các bạn nhiều.
Kamate
Hồi âm:
Nếu bạn đã học qua Pascal thì việc hiệu về con trỏ cũng đễ dàng hơn. Biến con chứa địa chỉ của ô nhớ mà nó trỏ đến, hay nói cách khác giá trị của biến con trỏ là địa chỉ của một vùng nhớ ( địa chỉ của một vùng nhớ là địa chỉ của ô nhớ đầu tiên, vùng nhớ này có độ lớn tuỳ thuộc vào việc khai báo của người lập trình ). Ví dụ nếu khai báo int *p; thì con trỏ p sẽ chỉ vào vung nhớ có độ lớn là 2 bye. Nói một cách nôm na thì biến con trỏ như một các cardvisit * là toán tử lấy dữ liệu quy chiếu hay nói các khác là lấy nội dung của ô nhớ mà con trỏ chỉ đến. & là toán tử lấy địa chỉ của ô nhớ, ví dụ int x=10; int *p; p=&x; thì lúc này p sẽ có giá trị là địa chỉ ô nhớ chứa biến x. Và rõ ràng là nếu ta lấy y=*p thì y sẽ có giá trị là 10.
Trong C/C++ con trỏ được sử dụng rộng rãi và kiểu mảng thực chất cũng là kiểu con trỏ. Trong khuôn khổ bài viết này mình không thể trình bafy hết về con trỏ. Tuy nhiên, càng học bạn sẽ thấy lợi ích của con trỏ.
Karl Nguyen Tran
Pointer là một loại biến đặc biệt; nó lưu địa chỉ của một kiểu biến. Ví dụ nếu ta khai báo:
int Value = 5
int *thePointer = &Value
*thePointer = 9
điều đó có nghĩa là the Pointer sẽ có giá trị là địa chỉ của Value trong bộ nhớ. Nếu muốn lấy giá trị mà pointer trỏ tới thì ta dùng dấu * trước biến con trỏ. Ví dụ, "thePointer" sẽ trả về địa chỉ của biến Value, còn "*thePointer" sẽ trả về giá trị của Value (= 5). Câu lệnh thứ 3 ở trên gán lại giá trị mà con trỏ thePointer trỏ tới.
Dùng pointer được lợi hơn biến ở chỗ: các cấu trúc dữ liệu sẽ được liên kết chặt chẽ theo dạng dây xích (biến này móc với biến kia), thích hợp đễ làm các chương trình cần cấu trúc dữ liệu như từ điển, thuật toán sắp xếp danh sách...
Nếu bạn đọc được tiếng Anh thì hãy vào đây, sẽ có thông tin thêm:
http://www.netcenter-vn.net/data_html/itlibrary/reference/library/0672310708/htm/ch08.htm
NKT