Truyền
bằng giá trị
Mặc
nhiên trong C, tất cả các đối số của hàm được truyền bằng giá trị. Điều này có
nghĩa là, khi các đối số được truyền đến hàm được gọi, các giá trị được truyền
thông qua các biến tạm. Mọi sự thao tác chỉ được thực hiện trên các biến tạm
này. Hàm được gọi không thể thay đổi giá trị của chúng. Xem ví dụ sau,
#include <stdio.h>
main()
{
int a, b, c;
a = b = c = 0;
printf(“\nEnter 1st integer:
“);
scanf(“%d”, &a);
printf(“\nEnter 2nd integer:
“);
scanf(“%d”, &b);
c = adder(a, b);
printf(“\n\na & b in
main() are: %d, % d”, a, b);
printf(“\n\nc in main() is:
%d”, c);
/* c gives the addition of a
and b */
}
int adder(int a, int b)
{
int c;
c = a + b;
a *= a;
b += 5;
printf(“\n\na & b within
adder function are: %d, %d “, a, b);
printf(“\nc within adder
function is : %d”,c);
return(c);
}
Ví dụ về
kết quả thực thi khi nhập vào 2 và 4:
a & b in main() are: 2, 4
c in main() is: 6
a & b within adder function are: 4,
9
c within adder function is : 6
Chương
trình trên nhận hai số nguyên, hai số này được truyền đến hàm adder().
Hàm adder() thực hiện như sau: nó nhận hai số nguyên như là các đối số của
nó, cộng chúng lại, tính bình phương cho số nguyên thứ nhất, và cộng 5 vào số
nguyên thứ hai, in kết quả và trả về tổng của các đối số thực. Các biến được sử
dụng trong hàm main() và adder() có cùng tên. Tuy nhiên, không có
gì là chung giữa chúng. Chúng được lưu trữ trong các vị trí bộ nhớ khác nhau.
Điều này được thấy rõ từ kết quả của chương trình trên. Các biến a và b trong
hàm adder() được thay đổi từ 2 và 4 thành 4 và 9. Tuy nhiên, sự thay đổi
này không ảnh hưởng đến các giá trị của a và b trong hàm main(). Các biến
được lưu ở những vị trí bộ nhớ khác nhau. Biến c trong main() thì
khác với biến c trong adder().
Vì vậy,
các đối số được gọi là truyền bằng giá trị khi giá trị của các biến được
truyền đến hàm được gọi và bất kỳ sự thay đổi trên giá trị này cũng không ảnh
hưởng đến giá trị gốc của biến đã truyền.
Đăng nhận xét