Mặc nhiên trong C, tất cả các tham số thực sự được truyền cho hàm theo giá trị (truyền giá trị của tham số thực sự cho hàm). Khi đó các tham số hình thức sử dụng các vùng nhớ riêng và là bản sao của các tham số thực sự, do đó hàm được gọi không thể thay đổi giá trị của các tham số thực sự. 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 */ } adder(int a, int b) { int c; c = a + b; a *= a; 137
b += 5;
printf(“\n\na & b within adder function are: %d, %d “, a, b);
printf(“\nc within adder function is : %d”,c);
return(c); }
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
Các biến được sử dụng trong hàm main() và
adder() có cùng tên. Tuy nhiên, 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(). Biến c trong main() thì khác với biến c trong
adder().
Tóm lại, khi các tham số thực sự được truyền
theo giá trị thì những thay đổi của các tham số hình
thức không hưởng đến giá trị của các tham số thực sự tương ứng.