You are on page 1of 2

Tham chiếu & tham trị trong C++

Đây là hai kỹ thuật truyền tham số: Vậy trước tiên ta phải biết truyền tham số là gì? Khi thực
hiện một lời gọi hàm, ta phải cung cấp đầy đủ thông tin để hàm thực hiện công việc của mình.
Ví dụ: ta có một hàm void test(int x)
khi thực hiện lời gọi hàm ta có thể gọi

test(n);
ở đây x: được gọi là tham số hình thức - chỉ mang tính hình thức.
n: được gọi là tham số thực sự.
việc gửi n vào cho hàm test thay thế cho x được gọi là truyền tham số. Với những hàm không
có tham số thì không phải truyền.:book:
Truyền tham trị: giá trị của tham số thực sự được gửi đến cho hàm. Khi thực hiện truyền tham
số theo kiểu này thì hàm được gọi chỉ tác động lên bản sao của tham số gốc, do vậy nó chỉ
làm thay đổi giá trị của bản sao mà không ảnh hưởng đến tham số gốc
ví dụ:

1. void test(int x)
2. {
3. x=x+10;
4. }
5. void main()
6. {
7. int n=5;
8. test(n);
9. cout<<"Gia tri n ="<<n<<endl;
10. }

Kết quả sau khi thực hiện chương trình trên: Gia tri n = 5. Ở đây n vẫn giữ nguyên giá trị ban
đầu mặc dù trong test có câu lệnh nhằm làm thay đổi nó. Truyền tham trị là cơ cấu mặc định
trong truyền tham số.
Truyền tham chiếu: về bản chất là ta gửi địa chỉ của tham số đến hàm được gọi, hàm được gọi
sẽ tác động lên vùng nhớ có địa chỉ mà nó nhận được (chính là tham số gốc) bởi vậy mọi thay
đổi mà nó gây ra đều làm ảnh hưởng đến tham số gốc.
ví dụ:

1. void test(int &amp;x)


2. {
3. x=x+10;
4. }
5. void main()
6. {
7. int n=5;
8. test(n);
9. cout<<"Gia tri n ="<<n<<endl;
10. }

Kết quả sau khi thực hiện chương trình trên: Gia tri n = 15. Ở đây n đã bị thay đổi. Việc gửi
địa chỉ (tham chiếu) của tham số đến hàm được gọi, người ta gọi đó là truyền tham chiếu. Với
hàm có cơ chế truyền tham chiếu thì nó không có vùng nhớ riêng cho tham số đó, khi thực
hiện lời gọi hàm, nó sẽ gán cho tham số một bí danh (alias) - đó chính là tên của tham số hình
thức và tự do tác động lên vùng nhớ của tham số được gửi tới.

You might also like