C/C++ 中的参数传递技术


在 C 中,我们可以通过两种不同的方式传递参数。这些是按值调用和按地址调用。在 C++ 中,我们可以获得另一种技术。这称为按引用调用。让我们看看它们的效果以及它们如何工作。

首先,我们将看到按值调用。在这种技术中,参数被复制到函数参数。因此,如果进行了一些修改,它将更新复制的值,而不是实际值。

示例

#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";
}

输出

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

按地址调用通过将变量的地址传递到函数中来工作。因此,当函数更新由该地址指向的值时,实际值将自动更新。

示例

#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";
}

输出

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

类似于按地址调用,在这里我们使用按引用调用。这是 C++ 专有功能。我们必须传递参数的引用变量,以便在更新它时更新实际值。只有在函数定义中,我们才必须在变量名称前放置 &。

示例

#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";
}

输出

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

更新于: 2019-07-30

6K+ 浏览

开启您的职业生涯

完成课程获得认证

开始
广告