Truyền tham số
Call by Value: Truyền giá trị bản sao. Thay đổi trong hàm không ảnh hưởng biến gốc.
Call by Reference: Truyền địa chỉ (con trỏ). Thay đổi trong hàm ảnh hưởng biến gốc.
Bảng so sánh
| STT | Tiêu chí | Call by Value | Call by Reference |
|---|---|---|---|
| 1 | Quy ước đặt tên | Truyền giá trị | Truyền tham chiếu/địa chỉ |
| 2 | Cơ chế nội bộ | Copy giá trị vào tham số hàm | Copy địa chỉ, cùng trỏ 1 ô nhớ |
| 3 | Tác động thay đổi | Không ảnh hưởng biến gốc | Ảnh hưởng biến gốc |
| 4 | Vị trí bộ nhớ | Khác nhau | Giống nhau |
| 5 | Ngôn ngữ hỗ trợ | C, C++, PHP, VB.NET, C# | Java (tham chiếu đối tượng), C++ (con trỏ/reference) |
Ví dụ Call by Value (C)
void swapByValue(int a, int b) {
int t = a; a = b; b = t;
}
main: n1=10, n2=20 → swapByValue(n1,n2) → n1=10, n2=20 (không đổi)
Ví dụ Call by Reference (C)
void swapByReference(int *a, int *b) {
int t = *a; *a = *b; *b = t;
}
main: n1=10, n2=20 → swapByReference(&n1,&n2) → n1=20, n2=10 (đổi chỗ)