我是C ++的新手。当我阅读时,我遇到了这个片段。
#include "iostream"
using namespace std;
void swap(int& num1,int& num2)
{
cout<<&num1<<"\n";
int temp=num1;
num1=num2;
num2=temp;
}
int main()
{
int num1=1,num2=4;
swap(num1, num2);
cout<<num1<<"\n"<<num2<<"\n";
return 0;
}
我怀疑的是,我们只传递了价值观。地址如何通过?请清楚我这个基本的疑问。
答案 0 :(得分:4)
没有发生隐式转换。您只是通过引用而不是按值传递int
。
浏览this tutorial。它相对较短,并且可以了解这个想法。
答案 1 :(得分:1)
您基本上是通过引用传递,而引用只是该int的别名(您可以说为该内存分配了另一个名称)。因此,使用该别名执行的任何操作都会反映到它所属的内存中(在本例中为原始int)
答案 2 :(得分:1)
RE
“地址如何通过?
它不是必然的。
例如,很可能您的编译器会在机器代码中内联函数调用,并将每个引用视为别名,无论其引用的是什么。
但是在许多情况下,这样的优化是不可能的,并且 ad hoc 方案(例如编号可能的绑定等)并不真实,所以一般实现引用,在机器代码级别,是一个内存地址。