Computer >> Máy Tính >  >> Lập trình >> C ++

Sự khác biệt giữa chuyển theo giá trị và chuyển bằng tham chiếu trong C ++

Trong C ++, chúng ta có thể truyền các đối số vào một hàm theo nhiều cách khác nhau. Những cách khác nhau này là -

  • Gọi theo giá trị
  • Gọi bằng Tham chiếu
  • Gọi theo địa chỉ

Đôi khi cuộc gọi theo địa chỉ được gọi là cuộc gọi tham chiếu, nhưng chúng khác nhau trong C ++. Trong cuộc gọi theo địa chỉ, chúng tôi sử dụng các biến con trỏ để gửi địa chỉ bộ nhớ chính xác, nhưng trong cuộc gọi bằng tham chiếu, chúng tôi truyền biến tham chiếu (bí danh của biến đó). Tính năng này không có trong C, ở đó chúng ta phải vượt qua con trỏ để có được hiệu ứng đó. Trong phần này, chúng ta sẽ xem lợi ích của gọi theo tham chiếu so với gọi theo giá trị và nơi sử dụng chúng

Gọi theo giá trị

Trong lệnh gọi theo giá trị, giá trị thực tế được truyền dưới dạng đối số không bị thay đổi sau khi thực hiện một số thao tác trên nó. Khi gọi theo giá trị được sử dụng, nó sẽ tạo một bản sao của biến đó vào phần ngăn xếp trong bộ nhớ. Khi thay đổi giá trị, nó sẽ thay đổi giá trị của bản sao đó, giá trị thực tế vẫn giữ nguyên.

Mã mẫu

#include<iostream>
using namespace std;

void my_function(int x) {
   x = 50;
   cout << "Value of x from my_function: " << x << endl;
}

main() {
   int x = 10;
   my_function(x);
   cout << "Value of x from main function: " << x;
}

Đầu ra

Value of x from my_function: 50
Value of x from main function: 10

Gọi theo tham chiếu

Trong cuộc gọi bằng cách tham chiếu, giá trị thực tế được truyền dưới dạng đối số được thay đổi sau khi thực hiện một số thao tác trên nó. Khi gọi bằng tham chiếu được sử dụng, nó sẽ tạo một bản sao của tham chiếu của biến đó vào phần ngăn xếp trong bộ nhớ. Là sử dụng một tham chiếu để nhận giá trị. Vì vậy, khi giá trị được thay đổi bằng cách sử dụng tham chiếu, nó sẽ thay đổi giá trị của biến thực tế.

Mã mẫu

#include<iostream>
using namespace std;

void my_function(int &x) {
   x = 50;
   cout << "Value of x from my_function: " << x << endl;
}

main() {
   int x = 10;
   my_function(x);
   cout << "Value of x from main function: " << x;
}

Đầu ra

Value of x from my_function: 50
Value of x from main function: 50

Sử dụng Gọi bằng tham chiếu ở đâu?

  • Lệnh gọi bằng tham chiếu chủ yếu được sử dụng khi chúng ta muốn thay đổi giá trị của đối số được truyền vào hàm invoker.

  • Một hàm chỉ có thể trả về một giá trị. Khi chúng ta cần nhiều hơn một giá trị từ một hàm, chúng ta có thể chuyển chúng dưới dạng đối số đầu ra theo cách này.