我正在参加编程语言原理课程,并且应该在此练习中告诉您该程序输出的内容:
{
int x=2;
void A (val/res int y)
{
x++;
write(y);
y=y+2;
}
A(x)
A(x+1)
write (x);
}
A是一个传递值/结果参数的函数,因此在返回之前,应将其形式参数(y)的最终值复制到实际参数中。第一次调用A时,其实际参数是x,因此没有问题。但是,对A的第二次调用将x + 1作为实际参数。 这意味着什么?也许y的最终值丢失了,因为没有变量可复制到哪里?或者也许我应该像方程式那样考虑它,所以如果y的最终值为7,我得到x + 1 = 7,那么x的值为6?
答案 0 :(得分:1)
这意味着将参数的 value 复制到y
:
x
= 2时,A(x)
在y
的开头将2复制到A
x
= 4时,A(x+1)
将{{1}的 value 或5复制到{{1}的x+1
}} 但是,正如您所指出的那样,为值/结果参数传递y
是有问题的,我希望任何支持这种类型参数的语言都不会出于您引用的原因而认为它合法。如果它被认为是合法的,那么如何实现将取决于语言的定义。我不认为有解决此问题的标准方法。