2010-06-03 70 views
0

假设语言支持这些评估策略,通过引用调用,按名称调用和按值调用的结果是什么?评估策略示例

void swap(int a; int b) 
{ 
    int temp; 
    temp = a; 
    a = b; 
    b = temp; 
} 

int i = 3; 
int A[5]; 
A[3] = 4; 
swap (i, A[3]); 
+0

这功课吗?如果是这样,请标记为这样。 – danben 2010-06-03 03:03:26

+0

不,它不是。它是一个类的例子,但是,发现http://personal.denison.edu/~krone/cs373/files/Call-by-Name-example.pdf – Andrew 2010-06-03 03:10:23

回答

1

通话按值 交换方法完成了-The变化不调用此方法后可见。 即。在swap (i, A[3])之后;

i, A[3]值不会被更改。

通过参考调用: 在调用方法之后,交换方法内所做的更改是可见的。 即。在swap (i, A[3])之后;

i, A[3]值得到交换。

,如果你使用的是C++语言作为,则该方法的签名应该修改成反映通:

void swap(int& a, int& b) 
{ 
    int temp; 
    temp = a; 
    a = b; 
    b = temp; 
} 
+0

因此,按价值调用会简单地复制我和A的值[3]分别转换为a和b,将a与b交换,并且由于我们只是复制这些值,所以它们在交换范围之外不会对它们执行任何操作,因为这些值不再由任何东西引用? 而且由于它们仍然引用ref中的对象,交换完成了吗? 上面提供的pdf用于回答danben的问题表明,在通过名称调用时,不正确的值被交换了......这是否与ref调用一样发生? – Andrew 2010-06-03 03:20:02

0

如果调用交换()的值什么都不会发生。如果你通过引用来调用它,它实际上会进行交换。

当函数的目标是返回值时,按值传递。

当您需要更新您的参数时通过引用传递。