在我问我的问题之前,我会指出我知道:
- 在 C 中,我们可以按值调用方法,也可以按引用调用方法
- 在Java中,我们只能按值调用方法(当我们传递一个对象时,我们传递的是对象引用的值而不是对象引用本身)
- 在 C 和 Java 上下文中,指针和引用之间存在差异。
现在的问题:
考虑一个数组:
arr = {1,2,3,4,5} //len =5
在 C 中,我可以做以下两件事:
foo(arr, len);
bar (arr+ 2, len -2);
函数定义:
foo(int *a, int l) {
...
printf("%d", &a[0]; //prints 1
...
}
bar (int *a, int l){
printf("%d", &a[0]; //prints 3
...
}
正如我们可以看到函数 bar 中的数组 a 以值 3 开头,因为它包含 arr[2] 的地址(原始数组)。如果我们想将子数组视为起始索引为 0 的新数组,这是在 C 中传递数组的一种巧妙方法。
我想知道是否可以在 Java 中实现相同的功能,尽管以下调用在 C 和 Java 中具有不同的含义:
foo(arr);