通过名称调用和通过文本参数传递机制调用与示例之间的区别

时间:2015-07-26 16:35:01

标签: parameter-passing callbyname pass-by-name

5种类型的参数传递机制: 1.pass按值 2.pass按引用 3.pass按值-结果 4.逐个文本(C中的宏) 5.通过名字(类似延续)

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

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

1 个答案:

答案 0 :(得分:0)

call-by-text是函数参数在传递之前不进行求值的地方,然后替换参数的实例。参数作为“文本”传递,因此如果函数的局部边界在范围之外使用相同的变量名,则可能导致问题。

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