c++ - 我对 C++ 中引用传递和返回的误解
问题描述
通过引用传递:
我了解到,当变量作为对函数的引用传递时,而不是复制,实际数据被传递给函数,但我认为如果确实如此,那么我们不应该能够再次访问该数据一旦程序执行在该函数的堆栈帧被破坏后返回到 main() 并在 main() 中将该引用变量保留为零或空值,但事实并非如此,我们仍然可以在 main() 中访问它,所以我认为在通过引用传递时,该变量的内存地址被传递给该函数引用变量参数,然后我们在该函数中使用另一个名称(引用变量)的内存,当该函数被破坏时,引用变量被破坏而不是实际数据。
我对这个概念的想法是正确的还是我在理解这个概念时犯了一些错误?
按参考返回
当作为对另一个函数的引用传递的变量作为对 main() 的引用返回时,内存地址是传递回 main() 还是实际返回的?
解决方案
我了解到,当变量作为对函数的引用传递时,而不是复制,实际数据被传递给函数
这是错误的。传递实际数据意味着传递值(通过复制或移动)。通过引用传递时,将对实际数据的引用传递给函数。
所以我认为在通过引用传递时,该变量的内存地址被传递给该函数引用变量参数,然后我们在该函数中使用另一个名称(引用变量)的该内存
这是正确的。
当作为对另一个函数的引用传递的变量作为对 main() 的引用返回时,内存地址是传递回 main() 还是实际返回的?
引用可以被认为是内存地址,因此返回引用类似于返回指针(内存地址)。
从函数返回引用时,您需要注意不要返回对函数本地变量的引用,因为该变量在函数返回后不再存在,并且会留下一个悬空引用当您尝试使用它时,可能会使您的程序崩溃。
推荐阅读
- angular - Angular - ngFor循环上的双向绑定问题
- node.js - 使用 pm2 运行的 VPS 服务器在 5-6 小时后关闭
- python - 使用 igraph python 从数据中读取关系
- docker - 可以用最少的手动交互复制一个完整的谷歌云项目吗?
- ios - iOS UIStackView .fill UIScrollView 内的对齐不起作用
- javascript - 如何在 JMETER 的 JSON 标头中调用 javascript 变量
- admin - 在启动时以管理员身份运行 AHK 脚本
- xml - 从逻辑应用检索 XML 数据的问题
- twilio - Twilio 出站呼叫 - 将更多人添加到现有呼叫
- r - 使用 purrr/tidyverse 在 R 中迭代地应用基于 store-product 的时间序列模型