Con trỏ (Đúng hơn phải nói là Kiểu con trỏ) là một biến chứa địa chỉ của một biến nào đó. Nếu bạn đã biết về con trỏ thì Dreaminess không giải thích nữa.
Tuy nhiên: Kiểu con trỏ rất mạnh mẽ nhưng không ít rắc rối khi dùng nó. Để khắc phục điểm này ở ngôn ngữ C++ có đưa thêm một kiểu gọi là kiểu tham chiếu (reference type), kiểu tham chiếu này có quan hệ rất gần gũi với kiểu con trỏ, nhưng an toàn hơn con trỏ. Lưu ý rằng một số ngôn ngữ không có kiểu con trỏ nhưng vẫn có kiểu tham chiếu chẳng hạn ngôn ngữ Basic
Kiểu tham chiếu thực chất nó chỉ là một alias đại diện cho một biến nào đó, lưu ý là nó không phải là một pointer.
Trước hết hãy xét một ví dụ:
Ví dụ:
Code:
int i = 0
int *pi=&i; // pi là con trỏ, trỏ đến địa chỉ của biến i
int &ali = i // ali là một alias(bí danh) đối với biến i
*pi=2 // Việc này sẽ gán luôn i=2
ali = 2 // Việc gán này không khác gì việc gán i=2
Mọi hoạt động thay đổi của ali sẽ hoàn toàn giống với việc hoạt động thay đổi của biến i.
Ví dụ: pi=&ali // Việc này sẽ gán pi với địa chỉ của biến i (Đúng như gán pi=&i), chứ không phải là địa chỉ của ali.
Khi sử dụng trong hàm chẳng hạn
int funvalue (int a);
int funref (int &a);
Mỗi khi sử dụng hàm funvalue, đối a sẽ được tạo mới ở dạng biến local, khi kết thúc biến local này sẽ bị giải phóng, và sẽ bị mất sau khi hàm kết thúc.
Ngược lại khi sử dụng hàm funref, đối a vẫn giữ nguyên. biến a lúc này có thể giống như một biến global.
Qua đây bạn sẽ thấy được một vài điểm khác nhau giữa kiểu con trỏ và kiểu tham chiếu.
Chúc may mắn.