Giáo trình ngôn ngữ C



tải về 2.34 Mb.
Chế độ xem pdf
trang61/62
Chuyển đổi dữ liệu16.03.2023
Kích2.34 Mb.
#54376
1   ...   54   55   56   57   58   59   60   61   62
C ĐHQGHN

Hàm và truyền tham số
 
Với C việc tryền tham số cho hàm được thực hiện qua cơ chế truyền tham trị. Tức là 
trong hàm chúng ta sử dụng tham số hình thức như là một bản sao dữ liệu của tham số 
được truyền cho hàm, do vậy chúng không làm thay đổi giá trị của tham số truyền vào. 
Hay nói khác đi, các tham số hình thức là các biến cụ bộ trong hàm, sự thay đổi của nó 
trong hàm không ảnh hưởng tới các biến bên ngoài.
Vậy trong trường hợp thực sự cần thay đổi giá trị của tham số thì thế nào? chẳng hạn 
bạn cần hàm để hoán đổi giá trị của a và b. 
Nếu bạn viêt hàm 
void doicho(int x, int y) {
int tg; 
tg = x; 
x=y; 
y=tg; 

hàm này đúng cú pháp nhưng với các lệnh sau: 
int a = 4; 
int b = 6; 
printf ("\ntruoc khi goi ham doi cho a=%d, b=%d",a,b); 
doicho(a,b); 
printf ("\nsau khi goi ham doi cho a=%d, b=%d",a,b); 
kết quả in ra là 
truoc khi goi ham doi cho a=4,b=6 
sau khi goi ham doi cho a=4,b=6 
Rõ ràng hàm đổi chỗ (doicho) thực hiện không đúng, nguyên nhân là với hàm doicho
x, y là hai biên cục bộ, khi gọi hàm doicho(a,b) chương trình dịch cấp phát vùng nhớ cho 
hai biến (tham số hình thức) x, y và sao chép giá trị của a vào x, b vào y, mọi thao tác 
trong hàm doicho đều thực hiên trên x, y mà không ảnh hưởng tới a và b, kết quả là a, b 
không đổi. 
Để khắc phục điều này chúng ta định nghĩa hàm với tham số là con trỏ và khi gọi các 
bạn hãy truyền cho nó địa chỉ của tham số thực sự, ví dụ: 


Gi¸o tr×nh tin häc c¬ së II - N
gôn ngữ
 C
95
void doicho2(int * x, int *y) {
int tg; 
tg = *x; 
*x = *y; 
*y = tg; 

Lúc này với các lệnh sau: 
int a = 4; 
int b = 6; 
printf ("\ntruoc khi goi ham doi cho a=%d, b=%d",a,b); 
doicho(&a,&b); 
printf ("\nsau khi goi ham doi cho a=%d, b=%d",a,b); 
kết quả in ra là 
truoc khi goi ham doi cho a = 4,b = 6
sau khi goi ham doi cho a = 6 , b = 4 
-------------------------------- 

tải về 2.34 Mb.

Chia sẻ với bạn bè của bạn:
1   ...   54   55   56   57   58   59   60   61   62




Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2024
được sử dụng cho việc quản lý

    Quê hương