Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parameters 按引用传递与按值传递结果_Parameters_Parameter Passing_Programming Languages_Pass By Reference - Fatal编程技术网

Parameters 按引用传递与按值传递结果

Parameters 按引用传递与按值传递结果,parameters,parameter-passing,programming-languages,pass-by-reference,Parameters,Parameter Passing,Programming Languages,Pass By Reference,引用调用生成形式参数的别名,因此典型参数的每次更改都会影响形式参数,而传递值-结果会将结果复制到典型参数,当函数返回时,它会将典型参数复制到形式。(请注意,值调用结果与值调用结果完全不同) 除了这两种参数传递方法之间的实现差异之外,在我看来,最终结果是相同的 我的问题是,这两种方法是否总是给出相同的结果,或者你能举一个例子,说明这两种方法返回的结果不同吗?如果在方法过程中读取原始变量,结果会有所不同。这可能是因为: 使用相同的基础变量提供了两个参数 该方法调用了更多从原始变量读取的代码 涉及到

引用调用生成形式参数的别名,因此典型参数的每次更改都会影响形式参数,而传递值-结果会将结果复制到典型参数,当函数返回时,它会将典型参数复制到形式。(请注意,值调用结果与值调用结果完全不同)

除了这两种参数传递方法之间的实现差异之外,在我看来,最终结果是相同的


我的问题是,这两种方法是否总是给出相同的结果,或者你能举一个例子,说明这两种方法返回的结果不同吗?

如果在方法过程中读取原始变量,结果会有所不同。这可能是因为:

  • 使用相同的基础变量提供了两个参数
  • 该方法调用了更多从原始变量读取的代码
  • 涉及到其他线程
下面是C#中的一个例子:

这个的输出是

10
20

。。。因为当第二次调用
action()
时,
p
的值已经更改为20。如果使用传递结果,
p
的值只有在
Foo
返回时才会更改。

如果在方法过程中读取原始变量,则会产生差异。这可能是因为:

  • 使用相同的基础变量提供了两个参数
  • 该方法调用了更多从原始变量读取的代码
  • 涉及到其他线程
下面是C#中的一个例子:

这个的输出是

10
20

。。。因为当第二次调用
action()
时,
p
的值已经更改为20。如果使用传递结果,
p
的值只有在
Foo
返回时才会更改。

我想您误解了传递值。实际上,传递值对形式参数没有任何影响。@M.Amini,传递值和值结果是完全不同的东西。@Henk Holterman,它用于fortran,您可以阅读它,也因此被称为“复制入复制出”。您还可以检查:,它被称为拷贝还原、拷贝入拷贝出或值返回。好吧,那是对的,因为我不懂Fortran。但这不是一般所说的传递值。你可能想更准确地解释这一点。@Henk Holterman,我也不懂fortran,我在大学的一节课上学习了参数传递(从值结果中有更多奇怪的方法),我想我很清楚,我问的是值结果,而不是值,这就是我在开始时更清楚地描述它的原因,另外,我在上面的评论中指出,它与按值调用不同……我认为您误解了按值传递。实际上,传递值对形式参数没有任何影响。@M.Amini,传递值和值结果是完全不同的东西。@Henk Holterman,它用于fortran,您可以阅读它,也因此被称为“复制入复制出”。您还可以检查:,它被称为拷贝还原、拷贝入拷贝出或值返回。好吧,那是对的,因为我不懂Fortran。但这不是一般所说的传递值。你可能想更准确地解释这一点。@Henk Holterman,我也不懂fortran,我在大学的一节课上学习了参数传递(从值结果中有更多奇怪的方法),我想我很清楚,我问的是值结果,而不是值,这就是我在开始时更清楚地描述它的原因,另外,我在上面的评论中指出,它不同于按值调用。。。