0
Tải bản đầy đủ (.doc) (196 trang)

Truyền bằng tham chiếu

Một phần của tài liệu TÀI LIỆU VÀ CÂU HỎI ÔN TẬP C++ (Trang 139 -142 )

Khi các tham số thực sự được truyền cho hàm theo giá trị thì hàm không thể thay đổi giá trị của chúng. Nếu chúng ta muốn thay đổi giá trị của các tham số thực sự thì chúng ta cần truyền chúng theo

tham chiếu. Khi truyền theo tham chiếu (truyền

địa chỉ của tham số thực sự cho hàm), hàm được phép truy xuất đến vùng bộ nhớ thực của các tham số thực sự và vì vậy có thể thay đổi giá trị của chúng.

Ví dụ: Xét một hàm nhận hai đối số và hoán vị giá trị của chúng. Chương trình giống như chương trình dưới đây sẽ không bao giờ thực hiện được mục đích này. #include <stdio.h> main() { int x, y; x = 15; y = 20; printf(“x = %d, y = %d\n”, x, y); swap(x, y); printf(“\nAfter interchanging x = %d, y = %d\n”, x, y); } swap(int u, int v) { 139

int temp; temp = u; u = v; v = temp; return; }

Kết quả của chương trình trên như sau: x = 15, y = 20

After interchanging x = 15, y = 20

Hàm swap() hoán vị các giá trị của u và v, nhưng không làm thay đổi giá trị của hai tham số thực sự của hàm là x và y trong main(). Điều này là bởi vì các tham số hình thức u, v trong swap() và các tham số thực sự x, y của hàm - các biến x, y trong main() được lưu trữ ở các vùng nhớ khác nhau.

Để thực hiện được mục đích trên, các tham số hình thức của hàm swap() phải là các con trỏ - tức là phải có một dấu * ở phía trước tên của tham số. Các tham số thực sự tương ứng với các tham số hình thức kiểu con trỏ có thể là một biến con trỏ hoặc một biến được tham chiếu theo dạng &tênbiến. Khi đó để thực hiện việc hoán vị hai số, ta viết lại hàm main() và hàm swap() như sau :

#include <stdio.h> void main()

{ int x, y, *px, *py; /* Storing address of x in px */ px = &x; /* Storing address of y in py */ py = &y; x = 15; y = 20; printf(“x = %d, y = %d \n”, x, y); swap (px, py);

/* Passing addresses of x and y */

printf(“\n After interchanging x = %d, y = %d\n”, x, y);

}

swap(int *u, int *v)

/* Accept the values of px and py into u and v */ { int temp; temp = *u; *u = *v; *v = temp; return; }

Kết quả của chương trình trên như sau: x = 15, y = 20

After interchanging x = 20, y = 15

Hai biến kiểu con trỏ px và py được khai báo, và địa chỉ của biến x và y được gán cho chúng. Sau đó các biến con trỏ được truyền cho hàm swap(), hàm này hoán vị các giá trị lưu trong x và y thông qua các con trỏ.

Chú ý : Truyền theo tham chiếu chỉ áp dụng đối với biến, không áp dụng với biểu thức chung chung.

Một phần của tài liệu TÀI LIỆU VÀ CÂU HỎI ÔN TẬP C++ (Trang 139 -142 )

×