call by value
按值传递(传递的是具体的值,如基础数据类型),不会改变实际参数的值。
call by reference
按引用传递(传递的是对象的引用,即对象的存储地址),能改变实际参数的内容。
软考例题
函数t()和f()的定义如下所示。若调用函数t()时传递给x的值为3,并且调用函数f()。第一个参数采用传值(call by value)方式,第二个参数采用传引用(call by reference)方式,则函数t()的返回值为____
t(int x){
int a;
a = 3*x-1;
f(x,a);
return a+x;
}
f(int r, int s){
int x;
x = 2*r+1;
s = x*r;
r = s-x;
return;
}
解:
- 传递给x的值为3 --> a = 3*x-1 --> a = 8
- f(x,a) --> f(int r, int s) --> f(3,8)
- f(3,8) --> r = 3, s = 8
- x = 2*r+1 --> x = 7
- s = x*r --> s = 21
注: 其中s为call by reference方式,此时改变的是s指向地址内的值,s即a的值发生改变即a = 21 - r = s-x -->14
注: 其中r为call by value方式,r即x不会受f()函数影响 - return 回 t()函数,此时x=r=3 a=s=21
- return a+x = 21+3 = 24
所以答案为:24