我想澄清按值和按引用之间的区别。
我画了一张图:
因此,对于按值传递,使用不同的引用创建相同对象的副本,并为局部变量分配新的引用,因此指向新副本
我应该如何理解以下内容?
如果函数修改了该值,则修改也出现在调用函数的范围内,用于按值传递和按引用传递
原文由 user36064 发布,翻译遵循 CC BY-SA 4.0 许可协议
我想澄清按值和按引用之间的区别。
我画了一张图:
因此,对于按值传递,使用不同的引用创建相同对象的副本,并为局部变量分配新的引用,因此指向新副本
我应该如何理解以下内容?
如果函数修改了该值,则修改也出现在调用函数的范围内,用于按值传递和按引用传递
原文由 user36064 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
我认为不传达 引用传递的 含义会产生很多混乱。当有些人说 通过引用传递 时,他们通常不是指参数本身,而是 _被引用的对象_。其他人说通过引用传递意味着对象不能在被调用者中更改。例子:
有些人会声称 1 和 3 是通过引用传递,而 2 是通过值传递。另一组人说除了最后一个之外都是按引用传递,因为对象本身没有被复制。
我想在这里定义我声称 通过引用传递的 内容。可以在此处找到对其的一般概述: 按引用传递和按值传递之间的区别。第一个和最后一个是值传递,中间两个是引用传递:
我投票支持以下定义:
这意味着以下内容是按值传递的:
1
是按值传递,因为它不是直接绑定的。实现可以复制临时文件,然后将该临时文件绑定到引用。2
是按值传递的,因为实现会初始化文字的临时值,然后绑定到引用。3
是传值,因为参数没有引用类型。4
出于同样的原因按值传递。5
是传值,因为参数没有得到引用类型。以下情况通过引用传递(根据 8.5.3⁄4 和其他规则):