Chương 4 HÀM
4.2. TRUYỀN THAMSỐ CHO HÀM 1 Biến toàn cục và biến địa phương
4.2.1. Biến tồn cục và biến địa phương
Ngơn ngữ c cung cấp nhiều loại biến và nhiều cách phân loại biến, nhưng có hai biến rất quan họng đó là biến toàn cục và biến cục bộ được phân biệt với nhau bởi phạm vi hoạt động và vòng đời của nó. Khi biến được khai báo trong một hàm thì nó được gọi là biến cục bộ và nó chỉ có phạm vi hoạt động trong thân hàm đó. Ra ngồi hàm, biến bị hủy. Biến cục bộ có thể là tham số của hàm, có thể là biến được khai báo trong thân hàm. Phân tích ví dụ sau:
Ví dụ 4.2.1
#include <stdio.h> #include <conio.h>
void swapfunc (int, int); // prototype void main 0
{
int x,y;
printf(“\n Nhap vao hai so x,y: ”); scanf (“%d %d”,&x,&y);
swap_fìmction(x,y);
printf(“\n Hai so sau khi hoan vi la %d va %d”,x,y); }
// Ham tinh Hoan vi
void swap_function(int X, int y) { int temp; temp - x; x = y; y = temp; }
Với chương trình này, nếu nhập giá frị hai biến X và y lần lượt là 5 và 7 thì kết quả in ra trên màn hình khi chạy chương trình là dịng “Hai so sau khi hoan vi la 5 va 7”. Lý do cụ thể như sau:
Chương trình dịch từ trên xuống nhưng khi chạy lại luôn bắt đầu chạy từ hàm main. Nó tạo hai biến có tên X, y và cấp phát bộ nhớ cho hai biến này. Đến lời gọi hàm swap_íunction(x,y), trình biên dịch sẽ nhảy đến phần định nghĩa hàm này. Đọc đến phần tham số của hàm, chương trình tạo, cấp phát bộ nhớ cho hai biến mới là X và y. Hai biến mới này có phạm vi chỉ ở trong hàm “Hoan vi”, còn hai biến X, y của hàm main lại có phạm vi chi ở trong hàm main. Do vậy, hai cặp biến này có tên và kiểu hồn tồn trùng nhau nhưng khác phạm vi nên vẫn hợp lệ. Chương
trình truyền tham trị của cặp biến X, y trong hàm main cho cặp biến x,y hàm Hoán vị. Sau đó là việc khởi tạo, cấp phát cho biến temp. Chương trình tiếp tục thực hiện các lệnh của hàm Hoán vị. Khi kết thúc hàm, biển X, y, temp bị hủy bỏ. Như vậy, việc các thao tác mà hàm hoán vị thực hiện là đã hoán vị giá trị lưu trên vùng nhớ của hai biến X, y của mình chứ khơng phải hốn vị giá trị của hai biến X, y cùa hàm main. Giá trị hai biến X, y của hàm main vẫn hoàn toàn khơng đổi. Do đó, sau khi thốt khỏi hàm hốn vị, chương trình quay trở lại hàm main, và lệnh in sau đó là in ra giá trị của hai biến X, y của hàm main.