请帮我理解参数传递

时间:2012-01-20 15:23:25

标签: parameter-passing

我希望了解有关参数解析的更多信息。我有一个例子,下面是代码。 如果我通过参数传递结果: *价值 *参考 *姓名

procedure f (x, y, z)
x := x + 1
y := z
z := z + 1

i := 0; a[0] := 10; a[1] := 11

f (i, a[i], i)

print i, a[0], a[1]

如果我理解正确,结果是:

按价值:1,11,12

参考文献:2,12,10

按名称:1,10,0

我是朝着正确的方向吗?

2 个答案:

答案 0 :(得分:1)

我会给你一个部分答案

当您按值传递时,会传递变量的副本,因此函数无法更改您的变量。 所以按值的答案应该是0,10,11,它们是i和数组的初始值。

当您通过引用传递时,它将更改您的值: 第一行将i改为1; 第二行将a [0]更改为1; 第三行将我改为2; 这意味着它将打印2,1,11

我从不喜欢过名字。

希望有所帮助

答案 1 :(得分:0)

当你传递值时,传入的值在调用f之前和之后都是相同的,所以第一个结果应该是0,10,11。

按名称传递使用文本替换,非常类似于c宏替换,在某些语言中使用,如Algol。在c中,将f定义为宏: #define f(x,y,z) x = x + 1; y = z; z = z + 1;将在此示例中展开 i = i + 1; a[i] = i; i = i + 1;产生结果

2,10,12