Có hai kiểu truyền đối số thực cho hàm: (a) tham trị: giá trị của đối số thực sẽ được gán cho đối số của hàm, (b) tham chiếu: tham chiếu của đối số thực được gán cho đối số của hàm (có thể đồng nhất đối số của hàm với đối số thực, thay đổi trên đối số của
hàm đồng nghĩa với thay đổi trên đối số thực). Để quy định cách truyền tham chiếu
cho đối số của hàm, khi cài đặt hàm ta phải thêm ký hiệu & trước tên đối số.
Các đối số trong các hàm của các CT trong các ví dụ 3.1, 3.2, 3.4 được truyền bằng tham trị.
Ví dụ 5.5: CT so sánh hình thức truyền tham chiếu và tham trị
#include …
void hoan_vi_1 (float &a, float &b); // a, b: tham chiếu
void hoan_vi_2 (float a, float b); // a, b: tham trị
void hoan_vi_3 (float a, float &b); // a: tham trị, b: tham chiếu
int main() {
float so_1_1 = 1.5, so_2_1 = 2.5, so_1_2 = 1.5, so_2_2 = 2.5, so_1_3 = 1.5, so_2_3 = 2.5;
printf (“\n”);
printf (“\nSo 1_1, 2_1 truoc hoan_vi_1: %f, %f”, so_1_1, so_2_1);
hoan_vi_1 (so_1_1, so_2_1);
printf (“\nSo 1_1, 2_1 sau hoan_vi_1: %f, %f”, so_1_1, so_2_1);
printf (“\n”);
printf (“\nSo 1_2, 2_2 truoc hoan_vi_2: %f, %f”, so_1_2, so_2_2);
hoan_vi_2 (so_1_2, so_2_2);
printf (“\nSo 1_2, 2_2 sau hoan_vi_2: %f, %f”, so_1_2, so_2_2);
printf (“\n”);
printf (“\nSo 1_3, 2_3 truoc hoan_vi_3: %f, %f”, so_1_3, so_2_3);
hoan_vi_3 (so_1_3, so_2_3);
printf (“\nSo 1_3, 2_3 sau hoan_vi_3: %f, %f”, so_1_3, so_2_3);
getch (); return 0; }
void hoan_vi_1 (float &a, float &b)
// a, b: tham chiếu
{
float tam = a; a = b; b = tam; }
Các đối số thực
a, b là tham chiếu đến so_1_1, so_2_1. Có thể xem a là so_1_1, b là so_2_1.
void hoan_vi_2 (float a, float b)
// a, b: tham trị
{
float tam = a; a = b; b = tam; }
void hoan_vi_3 (float a, float &b) // a: tham trị, b: tham chiếu
{
float tam = a; a = b; b = tam; }
Để hoán vị hai số nguyên, ta phải dùng hàm hoan_vi_1.