Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Khác biệt giữa Call by Value và Call by Reference

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

STTTiêu chíCall by ValueCall by Reference
1Quy ước đặt tênTruyền giá trịTruyền tham chiếu/địa chỉ
2Cơ chế nội bộCopy giá trị vào tham số hàmCopy địa chỉ, cùng trỏ 1 ô nhớ
3Tác động thay đổiKhông ảnh hưởng biến gốcẢnh hưởng biến gốc
4Vị trí bộ nhớKhác nhauGiống nhau
5Ngô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ỗ)