Truyền bằng giá trị

Một phần của tài liệu ngôn ngữ lt_c (Trang 139 - 140)

C là một ngơn ngữ lập trình có cấu trúc, tuy vậy nó vẫn chứa một số câu lệnh làm phá vớ cấu trúc của chương trình:

Bài 9 Hàm Mục tiêu:

9.9.1 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 */ } 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ố ngun 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.

Một phần của tài liệu ngôn ngữ lt_c (Trang 139 - 140)

Tải bản đầy đủ (DOCX)

(194 trang)
w