对于我的编程语言类,我试图理解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时,它是否也改变了这两种方法的工作方式?感谢您提前提供任何帮助。
答案 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
}
我希望这有帮助