我不确定本主题是否与“按呼叫引用”有关,但是我对这两个片段有疑问:
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 ++中,它只是作用域中的一个副本。到底有什么区别?
这可能与问题无关,但这是我的测试,用于确定一种语言是否通过引用传递(也就是通过名称传递)。
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。