Ngôn ngữ C++ không chỉ cung cấp một phương thức để truyền các tham số. Phương pháp thứ hai được gọi là truyền bằng tham chiếu và cho phép các hàm ảnh hưởng đến giá trị của tham số thực.
Nếu bạn sẽ truyền bất kỳ tham số bằng tham chiếu, bạn cần khai báo nó trong khai báo hàm. Hãy xem ví dụ sau →
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#include <iostream> using namespace std; void AmIAbleToChangeMyParameter(int ¶m) { cout << "----------" << endl; cout << "I have got: " << param << endl; param++; cout << "I'm about to give back: " << param << endl; cout << "----------" << endl; } int main(void) { int var = 1; cout << "var = " << var << endl; AmIAbleToChangeMyParameter(var); cout << "var = " << var << endl; return 0; } |
Nó trông rất giống với ví dụ trước, đúng không? Hãy xem kỹ và tìm một sự khác biệt cụ thể. Đây là một sự khác biệt rất quan trọng, một thay đổi hoàn toàn về hành vi của hàm.
Vâng bạn đã đúng. Sự khác biệt là do dấu & được đặt ở phía trước tên của tham số. Hãy làm rõ:- type name – tham số name được truyền bằng giá trị
- type & name – tham số name được truyền bằng tham chiếu
Lưu ý rằng đây là vai trò thứ ba mà kí tự & đảm nhận trong ngôn ngữ C++. Bạn có nhớ hai cái còn lại không ?
Khi một tham số được truyền bằng tham chiếu nó có nghĩa là một tham số hình thức chỉ là một từ đồng nghĩa của một tham số thực. Mỗi sửa đổi được thực hiện trên một tham số hình thức ngay lập tức ảnh hưởng đến tham số thực tế. Chúng ta có thể nói nôm na rằng các tham số truyền qua tham chiếu có vé khứ hồi và đưa các giá trị đã sửa đổi của họ trở về cho invoker.
Nếu bạn nghi ngờ, hãy chạy chương trình luôn và ngay, kết quả sẽ như sau →
1 2 3 4 5 6 |
var = 1 ---------- I have got: 1 I'm about to give back: 2 ---------- var = 2 |