关于参数传递(按值传递)

时间:2012-04-23 13:27:42

标签: programming-languages parameter-passing

执行类C程序后的结果是什么,如果参数传递机制是按名称传递结果?

procedure swap(int x, int y){
    int t = x;
    x = y;
    y = t;
}

main(){
     int v = 1;
     int list[5] = {1,3,5,7,9};
     swap(v, list[v]);
}

1 个答案:

答案 0 :(得分:0)

(注意:我假设这个问题是关于名字的问题,正如问题的正文所暗示的那样 - 不是标题所暗示的按价值调用结果。)

当使用call-by-name时,你可以通过在调用站点插入函数体并用(未评估的)参数替换函数体中每个参数名称来找出函数调用的结果。

在这种情况下,这意味着将每个x替换为v,每次出现y替换为list[v]。如果你这样做并在头脑中执行结果代码,你会看到结果是什么。