在此代码中:
#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”的值。这是为什么?
答案 0 :(得分:1)
在第二种情况下,您可以增加参数的COPY。在第一种情况下,使用“引用”,您可以修改变量本身。
查找“按值传递vs按引用传递。例如:
应该注意的是,C(与C ++不同)总是“按值传递”......但是等效可以通过将指针传递给变量来实现。
答案 1 :(得分:0)
在第一种情况下,number是对num1的引用。也就是说,这个数字是指num1所指的内存中的同一个地方。类似于指针,但没有解除引用它的麻烦。
在第二个数字是在add的激活记录中创建的,并放在堆栈上。当add终止时,数字变量被关闭(并且数字的内存被释放)堆栈,而num1在main的堆栈和激活记录中保持不变。
如果它是一个对象而不是一个原语,那么可以在调试器中看到,如果你在添加返回之前手动调用析构函数,那么会发生段错误。