首页 > 解决方案 > 当您将表达式传递给通过值结果传递的函数时会发生什么?

问题描述

我正在参加一门编程语言原理课程,并且有一个练习,我应该告诉我这个程序打印了什么:

{

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 first 被调用时,它的实际参数是 x,所以那里没有问题。但是,对 A 的第二次调用将 x+1 作为实际参数。这意味着什么?也许 y 的最终值会丢失,因为没有变量可以复制它?或者我应该把它看作一个方程,所以如果 y 的最终值为 7,我得到 x + 1 = 7,那么 x 的值为 6?

标签: functionargumentsparameter-passing

解决方案


这意味着参数的被复制到y

  • x=2 时,A(x)复制 2yA
  • x=4时,将或 5的A(x+1)复制到x+1yA

但是,正如您指出的那样,传递x+1值/结果参数是有问题的,我希望任何支持这种类型参数的语言都不会认为它是合法的,正如您所引用的那样。如果它被认为是合法的,它是如何完成的将取决于语言定义;我不相信有一个标准的方法来处理这个。


推荐阅读