Java vs C ++(Call-By-Reference?)

问题描述 投票:0回答:1

我不确定本主题是否与“按呼叫引用”有关,但是我对这两个片段有疑问:

Java

public static int calculateWinner(int[][] game){
        game[0][0] = 5; 
.
.
.
}


public static void main(String[] args) {

        int[][] game = {
            {1, 2, 2},
            {2, 1, 2},
            {1, 1, 1}
        };

        int winner = calculateWinner(game);
.
.
.
}

C ++

int calculateWinner(array<array<int, 3>, 3> field) {
    field[0][0] = 5;
.
.
.
}

int main(int argc, const char* argv[]) {

    array<array<int, 3>, 3> field;
    field[0] = { 2, 0, 1 };
    field[1] = { 0, 1, 0 };
    field[2] = { 1, 0, 2 };

    int winner = calculateWinner(field);
.
.
.
}

因此,如果我在main方法中打印出数组,为什么在Java中位置[0] [0]的数组为5,而在C ++中不是?我了解到,在C ++中,它只是作用域中的一个副本。到底有什么区别?

java c++ pass-by-reference call-by-value
1个回答
0
投票

这可能与问题无关,但这是我的测试,用于确定一种语言是否通过引用传递(也就是通过名称传递)。


int a = 10;
foo(a);
System.out.println(a); // prints 11 so pass by reference.

public void foo(int rst) {
   rst = rst + 1;
}

我曾经编程过的唯一语言就是Fortran4。您实际上可以传入5的常数。如果您给它加1并打印5,它将打印6。


© www.soinside.com 2019 - 2024. All rights reserved.