在下面的程序代码中,a是全局变量,若以引用调用(call by reference)方式调用函数f,则输出结果为多少?若以值调用(call by value)方式调用函数f,结果为多少?
主函数
Main program
a=5;
b=f(a);
write(a+b);f函数
function f(x)
a=a-1;
x=a+x;
return(a*x)
请求详细解答!谢谢了!
主函数
Main program
a=5;
b=f(a);
write(a+b);f函数
function f(x)
a=a-1;
x=a+x;
return(a*x)
请求详细解答!谢谢了!
所以说2种方式是没区别的
BTW:这个问题是不是发错版块了
看错题目了
你这里是有区别的
没看到上边把 a 给传进去了
在java里都是值传递,没有你所存在的问题
在c中
引用调用为:
a=a-1;
x=a+x;
因为传进来的是 a 的地址
所以 x 和 a 是指向同一地址, 互相有影响
a = 5;
a = a - 1 = 4;
此时 x = 4 了
x = a + x = 8
return(8 * 8) = 64;
以值调用为:
传进来的只是 a 的副本,x 和 a 不是同一个地址, 互相无影响
a = 5;
a = a - 1 = 4;
此时 x 还是 5
x = a + x = 9
return(9 * 4) = 36;
a=5-1;
x=4+5;
最后全局变量a=4 ,b=36.
private int a;
public static void main(String[] args) {
_110427_01 test = new _110427_01();
test.a = 5;
System.out.println(test.show(test.a)); // 36
System.out.println(test.a); // 4
}
public int show(int x) {
a -= 1;
x += a;
return (a * x);
}
Java 中所有的传递都是传的值:基本类型传的是值,引用类型传的也是值(只不过这个值是这个引用类型的地址而已)
a是对象:f(a)可以改变a的状态
a=5;
b=f(a);
write(a+b);function f(x)
a=a-1;//a=4
x=a+x;//x=5+4=9
return(a*x)返回4*9=36