为什么“doub(int x)”不会改变 int x 的实际值

Why does ```doub(int x)``` not change the actual value of the int x?

本文关键字:int 改变 doub 为什么      更新时间:2023-10-16

我正在学习编程C++专门处理指针。在下面的代码中,我不明白为什么doub(int x)不改变y的值,而trip(int* x)quint(int& x)都这样做。我知道最后两个函数都接收对象的地址,而第一个函数接收对象的地址。非常感谢任何解释或资源链接!

#include <iostream>
using namespace std;
void doub(int x) {
  x = x * 2;
}
void trip(int* x) {
  *x = *x * 3;
}
void quint(int& x) {
  x = x * 5;
}
int main() {
  int y = 7;
  doub(y);
  cout << y << endl; // prints 7 why does this not print 14?
  trip(&y);
  cout << y << endl; // prints 21
  quint(y);
  cout << y << endl; // prints 105
}
void doub(int& x) {
  x = x * 2;
}

将更改mainy的值。发生这种情况是因为int x创建整数的副本,而int& x通过引用传递它(类似于指针,有点(。

编辑以更多地解释引用:实际上,您现在越接近理解,就是说当您通过引用传递时,int& x中的x将是mainy变量的另一个名称,或者换句话说,别名。另一方面,int x创建一个临时整数,该整数是原始整数的副本。

这将打印 7,因为它是无指针大小写。该值在函数调用时被复制到堆栈,并在函数返回时弹出。

要改变它,这就是我们有指针的原因。让它不那么丑陋是我们有参考文献的原因。