0

在 5 种类型的参数传递机制中: 1.pass-by-value 2.pass-by-reference 3.pass-by-value-result 4.pass-by-text(C 中的宏) 5.pass-by-名称(类似于延续)

我只想要最后两个之间的区别。请帮忙!

参考: http: //www.math.grin.edu/~rebelsky/Courses/CS302/99S/Outlines/outline.36.html

4

1 回答 1

1

文本调用是指函数参数在传递之前不进行评估,然后替换参数的实例。参数是“作为文本”传递的,因此如果函数的本地边界在范围外使用相同的变量名,可能会导致问题。

int i = 0;

void f(int j) {
    print(j);   // is replaced with print(i + 5) and prints 5
    int i = 20;
    print(j);   // is replaced with print(i + 5) and prints 25
}

f(i + 5);        // passes the unevaluated expression i + 5

按名称调用的相似之处在于函数参数在传递之前不进行评估,然后替换参数的实例。但是,参数绑定到 thunk,它充当调用函数范围内变量的闭包。

void f(int j) {
    print(j);   // prints 5
    print(j);   // prints 10
}

int i = 0;
f(i + 5);        // passes the unevaluated expression i + 5

更多信息可以在这里找到:http ://www.cs.sjsu.edu/~pearce/modules/projects/Jedi/params/index.htm

于 2017-05-23T14:21:16.790 回答