按名称传递和按值传递结果

时间:2012-03-31 17:23:25

标签: parameter-passing pass-by-name

对于我的编程语言类,我试图理解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,调用swap之后的val和list的值是什么。

解释也很棒。

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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
}

我希望这有帮助