首页 > 解决方案 > 我对 C++ 中引用传递和返回的误解

问题描述

通过引用传递:

我了解到,当变量作为对函数的引用传递时,而不是复制,实际数据被传递给函数,但我认为如果确实如此,那么我们不应该能够再次访问该数据一旦程序执行在该函数的堆栈帧被破坏后返回到 main() 并在 main() 中将该引用变量保留为零或空值,但事实并非如此,我们仍然可以在 main() 中访问它,所以我认为在通过引用传递时,该变量的内存地址被传递给该函数引用变量参数,然后我们在该函数中使用另一个名称(引用变量)的内存,当该函数被破坏时,引用变量被破坏而不是实际数据。

我对这个概念的想法是正确的还是我在理解这个概念时犯了一些错误?

按参考返回

当作为对另一个函数的引用传递的变量作为对 main() 的引用返回时,内存地址是传递回 main() 还是实际返回的?

标签: c++pass-by-referencereturn-by-reference

解决方案


我了解到,当变量作为对函数的引用传递时,而不是复制,实际数据被传递给函数

这是错误的。传递实际数据意味着传递(通过复制或移动)。通过引用传递时,将对实际数据的引用传递给函数。

所以我认为在通过引用传递时,该变量的内存地址被传递给该函数引用变量参数,然后我们在该函数中使用另一个名称(引用变量)的该内存

这是正确的。

当作为对另一个函数的引用传递的变量作为对 main() 的引用返回时,内存地址是传递回 main() 还是实际返回的?

引用可以被认为是内存地址,因此返回引用类似于返回指针(内存地址)。

从函数返回引用时,您需要注意不要返回对函数本地变量的引用,因为该变量在函数返回后不再存在,并且会留下一个悬空引用当您尝试使用它时,可能会使您的程序崩溃。


推荐阅读