Gọi C ++ theo Tham chiếu: Sử dụng con trỏ (Có Ví dụ)

Trong hướng dẫn này, chúng ta sẽ tìm hiểu về lệnh gọi C ++ bằng cách tham chiếu đến việc chuyển con trỏ làm đối số cho hàm với sự trợ giúp của các ví dụ.

Trong hướng dẫn về Hàm C ++, chúng ta đã tìm hiểu về cách truyền các đối số cho một hàm. Phương thức này được sử dụng được gọi là truyền theo giá trị vì giá trị thực được truyền.

Tuy nhiên, có một cách khác để truyền đối số cho một hàm mà giá trị thực của đối số không được truyền. Thay vào đó, tham chiếu đến các giá trị được chuyển.

Ví dụ,

 // function that takes value as parameter void func1(int numVal) ( // code ) // function that takes reference as parameter // notice the & before the parameter void func2(int &numRef) ( // code ) int main() ( int num = 5; // pass by value func1(num); // pass by reference func2(num); return 0; )

Chú ý &trong void func2(int &numRef). Điều này biểu thị rằng chúng tôi đang sử dụng địa chỉ của biến làm tham số của chúng tôi.

Vì vậy, khi chúng ta gọi func2()hàm main()bằng cách truyền biến num làm đối số, chúng ta thực sự đang chuyển địa chỉ của biến num thay vì giá trị 5 .

C ++ Truyền theo giá trị so với Truyền theo tham chiếu

Ví dụ 1: Truyền qua tham chiếu không có con trỏ

 #include using namespace std; // function definition to swap values void swap(int &n1, int &n2) ( int temp; temp = n1; n1 = n2; n2 = temp; ) int main() ( // initialize variables int a = 1, b = 2; cout << "Before swapping" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; // call function to swap numbers swap(a, b); cout << "After swapping" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; return 0; )

Đầu ra

 Trước khi hoán đổi a = 1 b = 2 Sau khi hoán đổi a = 2 b = 1

Trong chương trình này, chúng ta đã chuyển các biến a và b vào swap()hàm. Lưu ý định nghĩa hàm,

 void swap(int &n1, int &n2)

Ở đây, chúng tôi đang sử dụng &để biểu thị rằng hàm sẽ chấp nhận các địa chỉ làm tham số của nó.

Do đó, trình biên dịch có thể xác định rằng thay vì các giá trị thực, tham chiếu của các biến được chuyển cho các tham số hàm.

Trong swap()hàm, các tham số hàm n1 và n2 trỏ đến cùng giá trị với các biến a và b tương ứng. Do đó, việc hoán đổi diễn ra trên giá trị thực tế.

Nhiệm vụ tương tự có thể được thực hiện bằng cách sử dụng các con trỏ. Để tìm hiểu về con trỏ, hãy truy cập C ++ Pointers.

Ví dụ 2: Chuyển qua tham chiếu bằng con trỏ

 #include using namespace std; // function prototype with pointer as parameters void swap(int*, int*); int main() ( // initialize variables int a = 1, b = 2; cout << "Before swapping" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; // call function by passing variable addresses swap(&a, &b); cout << "After swapping" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; return 0; ) // function definition to swap numbers void swap(int* n1, int* n2) ( int temp; temp = *n1; *n1 = *n2; *n2 = temp; )

Đầu ra

 Trước khi hoán đổi a = 1 b = 2 Sau khi hoán đổi a = 2 b = 1

Ở đây, chúng ta có thể thấy đầu ra giống như ví dụ trước. Lưu ý dòng,

 // &a is address of a // &b is address of b swap(&a, &b);

Ở đây, địa chỉ của biến được chuyển trong quá trình gọi hàm chứ không phải biến.

Vì địa chỉ được chuyển thay vì giá trị, nên một toán tử tham chiếu *phải được sử dụng để truy cập giá trị được lưu trữ trong địa chỉ đó.

 temp = *n1; *n1 = *n2; *n2 = temp; 

*n1*n2cho giá trị được lưu tại địa chỉ n1 và n2 tương ứng.

Vì n1 và n2 chứa địa chỉ của a và b, bất kỳ điều gì được thực hiện với *n1và * n2 sẽ thay đổi giá trị thực của a và b.

Do đó, khi chúng ta in giá trị của a và b trong main()hàm, các giá trị sẽ bị thay đổi.

thú vị bài viết...