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

Kỹ thuật truyền tham số trong C / C ++

Trong C, chúng ta có thể truyền tham số theo hai cách khác nhau. Đây là gọi theo giá trị và gọi theo địa chỉ, Trong C ++, chúng ta có thể nhận được một kỹ thuật khác. Đây được gọi là Cuộc gọi bằng cách tham chiếu. Hãy để chúng tôi xem tác dụng của những thứ này và cách chúng hoạt động.

Đầu tiên chúng ta sẽ thấy cuộc gọi theo giá trị. Trong kỹ thuật này, các tham số được sao chép vào các đối số của hàm. Vì vậy, nếu một số sửa đổi được thực hiện, điều đó sẽ cập nhật giá trị được sao chép chứ không phải giá trị thực.

Ví dụ

#include <iostream>
using namespace std;
void my_swap(int x, int y) {
   int temp;
   temp = x;
   x = y;
   y = temp;
}
int main() {
   int a, b;
   a = 10;
   b = 40;
   cout << "(a,b) = (" << a << ", " << b << ")\n";
   my_swap(a, b);
   cout << "(a,b) = (" << a << ", " << b << ")\n";
}

Đầu ra

(a,b) = (10, 40)
(a,b) = (10, 40)

Lệnh gọi theo địa chỉ hoạt động bằng cách chuyển địa chỉ của các biến vào trong hàm. Vì vậy, khi hàm cập nhật giá trị được trỏ bởi địa chỉ đó, giá trị thực tế sẽ được cập nhật tự động.

Ví dụ

#include <iostream>
using namespace std;
void my_swap(int *x, int *y) {
   int temp;
   temp = *x;
   *x = *y;
   *y = temp;
}
int main() {
   int a, b;
   a = 10;
   b = 40;
   cout << "(a,b) = (" << a << ", " << b << ")\n";
   my_swap(&a, &b);
   cout << "(a,b) = (" << a << ", " << b << ")\n";
}

Đầu ra

(a,b) = (10, 40)
(a,b) = (40, 10)

Giống như cuộc gọi theo địa chỉ, ở đây chúng tôi đang sử dụng cuộc gọi bằng cách tham chiếu. Đây là tính năng chỉ C ++. Chúng ta phải truyền biến tham chiếu của đối số, vì vậy để cập nhật nó, giá trị thực tế sẽ được cập nhật. Chỉ ở định nghĩa hàm, chúng ta phải đặt &trước tên biến.

Ví dụ

#include <iostream>
using namespace std;
void my_swap(int &x, int &y) {
   int temp;
   temp = x;
   x = y;
   y = temp;
}
int main() {
   int a, b;
   a = 10;
   b = 40;
   cout << "(a,b) = (" << a << ", " << b << ")\n";
   my_swap(a, b);
   cout << "(a,b) = (" << a << ", " << b << ")\n";
}

Đầu ra

(a,b) = (10, 40)
(a,b) = (40, 10)