1

对于我的编程语言课程,我试图了解 pass-by-name 和 pass-by-value-result 的工作原理。我意识到这些在主流语言中几乎没有使用,但我想了解它们是如何工作的。例如(与语言无关):

void swap(int a, int b){
    int t;
    t = a;
    a = b;
    b = t;
}
void main() {
    int val = 1, list[5] = {1, 2, 3, 4, 5}
    swap(val, list[val]); 
}

对于 pass-by-value-result 和 pass-by-name 调用交换之后 val 和 list 的值是什么。

一个解释也会很棒。

根据我的推断,它得到了值结果:val=2,list={1,1,3,4,5} 和名称:val=3,list={1,2,1,4,5}。我对这些结果非常不确定。

当传递一个数组而不是单个 int 时,它是否会改变这两种方法的工作方式?感谢您提前提供任何帮助。

4

2 回答 2

0

如果您的意思是按名称传递作为按引用传递,那么结果将与按值传递相同。
这是因为您只是在 val 和列表位置 val 之间切换引用。您没有传递数组引用。将 var 视为指向包含值的内存块的指针。

于 2012-03-31T17:53:13.150 回答
0

此代码解释了按名称传递的问题之一,这就是为什么

在交换中,这就是发生的事情

void swap(int a, int b){
    int t;
    t = a; //t=val; t=1
    a = b;// val=list[val]; val=list[1]=2
    b = t;// list[val]=t; list[2]=1
}
void main() {
    int val = 1, list[5] = {1, 2, 3, 4, 5}
    swap(val, list[val]); 
}

如您所见,val 在 val=list[val] 处发生了更改,并且不再是您传递的 val

至于传值结果

void swap(int a=1, int b=2){
    int t;
    t = a; //a=1 so t=1
    a = b; //b=2 so a=2
    b = t; //b=1 so it and it return the right parameter so list[1]=2
}

我希望这有帮助

于 2013-05-16T09:21:11.040 回答