Phương thức call by reference trong C của các đối số truyền cho một hàm sao chép địa chỉ của một đối số vào tham số chính thức. Bên trong hàm, địa chỉ được sử dụng để truy cập đối số thực tế được sử dụng trong cuộc gọi hàm. Nó có nghĩa là những thay đổi được thực hiện cho tham số ảnh hưởng đến đối số đã truyền.
Để chuyển một giá trị theo tham chiếu, các con trỏ đối số được chuyển tới các hàm giống như bất kỳ giá trị nào khác. Vì vậy, bạn cần phải khai báo các tham số hàm như các kiểu con trỏ như trong hàm swap(), hoán đổi các giá trị của hai biến số nguyên được trỏ tới, bởi các đối số của chúng. Ví dụ:
#include <stdio.h> /* khai bao prototype */ void swap(int *x, int *y); int main() { // dinh nghia cac bien local int a = 100; int b = 200; printf("Truoc swap, gia tri cua a : %d\n", a ); printf("Truoc swap, gia tri cua b : %d\n", b ); // goi ham swap() de hoan doi cac gia tri swap(&a, &b); printf("Sau swap, gia tri cua a : %d\n", a ); printf("Sau swap, gia tri cua b : %d\n", b ); return 0; } /* * ham hoan doi cac gia tri */ void swap(int *x, int *y) { int temp; temp = *x; *x = *y; *y = temp; return; }
Kết quả:
Truoc swap, gia tri cua a : 100 Truoc swap, gia tri cua b : 200 Sau swap, gia tri cua a : 200 Sau swap, gia tri cua b : 100
Kết quả cho thấy sự thay đổi bên trong hàm swap() cũng đã phản ánh bên ngoài hàm, không giống như call by value mà các thay đổi không phản ánh bên ngoài hàm.