假设语言支持这些评估策略,通过引用调用,按名称调用和按值调用的结果是什么?评估策略示例
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]);
假设语言支持这些评估策略,通过引用调用,按名称调用和按值调用的结果是什么?评估策略示例
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]);
通话按值 交换方法完成了-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;
}
因此,按价值调用会简单地复制我和A的值[3]分别转换为a和b,将a与b交换,并且由于我们只是复制这些值,所以它们在交换范围之外不会对它们执行任何操作,因为这些值不再由任何东西引用? 而且由于它们仍然引用ref中的对象,交换完成了吗? 上面提供的pdf用于回答danben的问题表明,在通过名称调用时,不正确的值被交换了......这是否与ref调用一样发生? – Andrew 2010-06-03 03:20:02
如果调用交换()的值什么都不会发生。如果你通过引用来调用它,它实际上会进行交换。
当函数的目标是返回值时,按值传递。
当您需要更新您的参数时通过引用传递。
这功课吗?如果是这样,请标记为这样。 – danben 2010-06-03 03:03:26
不,它不是。它是一个类的例子,但是,发现http://personal.denison.edu/~krone/cs373/files/Call-by-Name-example.pdf – Andrew 2010-06-03 03:10:23