我正在学习参数传递。
我一直在研究有关参数传递的问题,但我不理解一个问题。
我搜索了Internet,但没有显示参数为表达式的例子。
如果是表达式,我可以知道如何评估通行证吗?
问题如下。
function func(int a, int b, int c)
begin
a := b + c;
b := c + 1;
print a, b, c;
end
function main
begin
int x := 10;
int y := 5;
ink z := 15;
func(x, y, y + z);
print x, y, z;
end
答案 0 :(得分:0)
来自Wikipedia :(请注意,“按名称呼叫”和“按名称传递”是相同的意思。)
按名称调用是一种评估策略,其中在调用函数之前不评估函数的参数,而是将其直接替换为函数主体(使用捕获避免替换),然后在每次使用它们时对其进行赋值出现在功能中。如果函数主体中未使用参数,则永远不会对参数求值;如果多次使用,每次出现时都会重新评估。
因此,对于您的功能,我们应该相应地替换a → x
,b → y
和c → y + z
:
begin
x := y + (y + z);
y := (y + z) + 1;
print x, y, (y + z);
end
我在替换c
的地方加上了方括号,以明确说明当表达式“复制/粘贴”到函数中时,它不会改变其他操作的优先级;例如,3 * c
相当于3 * (x + y)
,而不是3 * x + y
。
c
被表达式y + z
代替而不是简单变量的事实在这里不会造成任何问题,因为c
从未出现在赋值的左侧声明。