Tham chiếu (References)
Khi biến khai báo là tham chiếu, nó trở thành tên thay thế cho biến đã tồn tại.
Cú pháp
Type &newname = existing_name;
Khởi tạo
Type &ref = variable_name;
Con trỏ (Pointers)
Con trỏ lưu địa chỉ của biến.
Cú pháp
Type *pointer;
Khởi tạo
Type *pointer = &variable_name;
Các khác biệt chính:
- Tham chiếu dùng để tham chiếu biến tồn tại bằng tên khác; con trỏ lưu địa chỉ biến.
- Tham chiếu không thể gán giá trị null; con trỏ có thể.
- Tham chiếu truyền bằng giá trị (pass by value) nhưng thực chất là alias; con trỏ truyền bằng tham chiếu (pass by reference) - *sửa: con trỏ truyền giá trị con trỏ, nhưng cho phép sửa đối tượng trỏ tới*.
- Tham chiếu bắt buộc khởi tạo khi khai báo; con trỏ không bắt buộc.
- Tham chiếu chia sẻ địa chỉ bộ nhớ với biến gốc nhưng cũng chiếm chỗ trên stack; con trỏ có địa chỉ và kích thước riêng trên stack.