在下面的程序代码中,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)
请求详细解答!谢谢了!

解决方案 »

  1.   

    你这里没有涉及到想改变参数值的问题
    所以说2种方式是没区别的
    BTW:这个问题是不是发错版块了
      

  2.   

    。。
    看错题目了
    你这里是有区别的
    没看到上边把 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;
      

  3.   

    首先: a=5 b=f(x);此时x=5;此时x是一个新的int变量,与a只有赋值的一个关系。
    a=5-1;
    x=4+5;
    最后全局变量a=4 ,b=36.
      

  4.   

    作为全局变量的a在代码中一定是在所有方法的外部的,所以如果想在main方法中调用a那么a必须是静态变量,每次只可以有一个值。只要改变了就已经变化了。
      

  5.   


            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 中所有的传递都是传的值:基本类型传的是值,引用类型传的也是值(只不过这个值是这个引用类型的地址而已)
      

  6.   

    a是基本类型:f(a)不改变a值
    a是对象:f(a)可以改变a的状态
      

  7.   

    Main program
    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