为什么值只在引用为调用参数时才会更改?

时间:2014-02-27 22:46:38

标签: reference

在此代码中:

#include <iostream>
int num1 = 0;
using namespace std;
void add(int &number);
int main()
 {
 int num2;
 int num3;
 add(num1);
 cout << "Num1 is: " << num1 << ". Yep, " << num1 << ".";
 } 
void add(int &number)
 {
 number++;
 }

传递的值“num1”到“add”会改变它,但是在这段代码中:

#include <iostream>
    int num1 = 0;
    using namespace std;
    void add(int number);
    int main()
     {
     int num2;
     int num3;
     add(num1);
     cout << "Num1 is: " << num1 << ". Yep, " << num1 << ".";
     } 
    void add(int number)
     {
     number++;
     }

它不会改变,“num1”的值。这是为什么?

2 个答案:

答案 0 :(得分:1)

在第二种情况下,您可以增加参数的COPY。在第一种情况下,使用“引用”,您可以修改变量本身。

查找“按值传递vs按引用传递。例如:

应该注意的是,C(与C ++不同)总是“按值传递”......但是等效可以通过将指针传递给变量来实现。

答案 1 :(得分:0)

在第一种情况下,number是对num1的引用。也就是说,这个数字是指num1所指的内存中的同一个地方。类似于指针,但没有解除引用它的麻烦。

在第二个数字是在add的激活记录中创建的,并放在堆栈上。当add终止时,数字变量被关闭(并且数字的内存被释放)堆栈,而num1在main的堆栈和激活记录中保持不变。

如果它是一个对象而不是一个原语,那么可以在调试器中看到,如果你在添加返回之前手动调用析构函数,那么会发生段错误。