2009-10-30 45 views
6

Sự khác biệt giữa tính năng chuyển-qua-tham chiếu và sử dụng ký hiệu con trỏ C là gì?Sự khác biệt giữa tham chiếu chuyển tiếp và *?

void some_function(some_type& param)

void some_function(some_type *param)

Cảm ơn

+4

Tôi nghi ngờ ai đó sẽ tái tạo một trong 1000 hướng dẫn và giải thích đã tồn tại ở đây. Hãy xem: http://www.parashift.com/c++-faq-lite/references.html – pmr

+0

dupe có thể có: http://stackoverflow.com/questions/57483/difference-between-pointer-variable-and -reference-variable-in-c – Jherico

+0

duplicate: http://stackoverflow.com/questions/1322517/passing-a-modifiable-parameter-to-c-function – SadSido

Trả lời

7

Khi bạn chuyển con trỏ đến biến trong cuộc gọi chương trình con, địa chỉ của biến đó được chuyển đến chương trình con. Để truy cập biến trong chương trình con, con trỏ phải được bỏ qua.

Khi bạn chuyển tham chiếu đến biến, trình biên dịch sẽ xử lý địa chỉ của biến khi biến được chuyển đến chương trình con và bỏ qua biến trong chương trình con.

+0

Thật tuyệt vời! Điều này giúp rất nhiều! –

+0

Đó chắc chắn KHÔNG phải là một cú pháp. Có những khác biệt, như bạn có thể thấy từ các câu trả lời khác. – SadSido

+0

Có nhiều khác biệt tinh tế giữa hai tham chiếu là một bí danh. Xem bên dưới. –

6
  • Bạn không thể có được một tài liệu tham khảo NULL: này một mình mang đến cho bạn rất nhiều về an toàn
  • bạn có thể coi bạn tham khảo như thể nó là một đối tượng: bạn có thể dereference nó hoặc bất cứ điều gì bạn cần.

Về cơ bản, bạn xử lý một con trỏ an toàn như thể đó là đối tượng của riêng bạn.

+6

bạn có thể dễ dàng nhận được một tham chiếu null bởi dereferencing một con trỏ null. – Jherico

+0

Thats là phòng thủ hay hoang tưởng ?? –

+0

Nó thường là một sai lầm: điểm tham chiếu của bạn đến một đối tượng đã bị phá hủy hoặc chưa bao giờ tồn tại. Ví dụ khét tiếng: 'std :: vector myVec; myVec.front(); '... làm thế nào bạn hối tiếc sau đó, rằng' std :: vector :: front' không ném out_of_range! –

Các vấn đề liên quan