我希望了解有关参数解析的更多信息。我有一个例子,下面是代码。 如果我通过参数传递结果: *价值 *参考 *姓名
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
我是朝着正确的方向吗?
答案 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