通过引用传递时实际发生了什么
What actually happens when passing by reference
当我像这样通过引用传递变量时:
void function(int &r){
//do something
}
int main(){
int a = 100;
function(a);
return 0;
}
到底发生了什么?r
是否包含一个整数变量的地址?它是如何找到它的?
整数a
的引用将作为参数传递给您的函数。现在在你的函数中,如果你改变了r
所指向的值,它也会反映在a
中。
如果你在函数中赋值r=2
,并在main中输出a
,你会看到a
的值是2。
你的程序有一些语法错误,但我能理解你想表达的意思。
编辑:从用户的角度来看,这就好像在函数中接收一个值,只是对它所做的修改对调用者是可见的。在传递大对象时,它在性能方面也更便宜,因为不需要复制。
实际上是编译器传递一个指向函数的指针。但是,由于调用者必须有一个有效的对象来传递给函数,因此与指针相反,引用不能无效,因此您不需要检查NULL
值。
相关文章:
- 此测试()中发生了什么意外过程?为什么总是覆盖 ch[0 1 2..]?
- 这C++代码中发生了什么C++(指数函数)
- 哪种方式更快?究竟发生了什么,我们没有看到什么?
- 从"LLONG_MAX 秒"构造 std::chrono::毫秒变量时发生了什么?
- 这个片段中关于 n 在 pc[i] 中的表示发生了什么
- istringstream,num1 和 num2 在这里发生了什么?
- 究竟发生了什么,我们需要在 c++ 中双重调度/访客
- 我是否能够确定在部署一个程序后发生了什么,我在数组末尾写入?
- 这个阶乘程序内部发生了什么?
- C++ - *(int**) 地址?这里发生了什么?
- C++用用户输入在循环中填充 char 数组:输入整个字符串时到底发生了什么?
- 让对象知道它创建的 show 函数中发生了什么
- 这里的矢量数组发生了什么?
- 增加顶级常量指针时发生了什么
- 当另一端将其关闭时,插座发生了什么
- C :我堆栈顶部发生了什么
- 此递归中发生了什么?我需要仅使用递归/无循环来计算和备份
- 这个 std::vector 构造函数中发生了什么
- 编译器认为 int 是一个字符串.发生了什么事情
- 无法运行简单的 std::async 和 std::future 测试程序。错误:"has initializer but incomplete type."发生了什么?