为什么intarr=new int[10]
直接arr[i]访问数组了
arr不是一个指针变量吗
难道不应该arr[i]访问吗
int*arr数组里的元素arr1,arr2,arr3的地址是连续存放的
这里设计到一个新概念:数组指针
将在下一站🚌讲解!
但是它们对应的各自的数组内数据并不连续
如:arr1和arr2这两个数组各自元素的地址并不连续
在Java中,数组是一种特殊的对象,它是由相同类型的元素组成的有序集合。在访问数组元素时,可以直接使用arr[i]
的方式,而不需要使用指针变量的形式*arr + i
。这是因为Java中的数组名(如arr
)实际上不是一个指针变量,而是一个引用变量,它存储的是指向数组对象的引用,而不是数组对象本身的内存地址。因此,使用arr[i]
访问数组元素实际上是通过数组引用变量和索引来计算出要访问的元素的地址,并获取该地址的值。
为了更好地理解这个问题,我们可以分析翻转数组的例子。翻转数组是将数组中的元素按照相反的顺序重新排列。下面是一个翻转数组的示例代码:
public class Test {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5};
reverseArray(arr);
printArray(arr);
}
public static void reverseArray(int[] arr) {
int left = 0;
int right = arr.length - 1;
while (left < right) {
// 使用临时变量交换数组中两个元素的值
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
// 移动指针,继续交换下一对元素
left++;
right--;
}
}
public static void printArray(int[] arr) {
System.out.print("[");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]);
if (i < arr.length - 1) {
System.out.print(", ");
}
}
System.out.println("]");
}
}
上述代码中,我们通过reverseArray
方法将数组中的元素进行翻转,然后通过printArray
方法将翻转后的数组打印出来。
在reverseArray
方法中,我们使用arr[left]
和arr[right]
来访问数组中的元素,这种访问方式实际上是通过数组引用变量arr
和索引left
和right
来获取指定元素的值。这种方式更加直观和易于理解,并且减少了使用指针的复杂性。在Java中,很多操作都是基于数组引用和索引来进行的,因此使用arr[i]
的方式是更加方便和常见的。
需要注意的是,虽然在数组中使用arr[i]
的方式更加直观和方便,但在其他一些情况下,我们仍然需要使用指针变量的形式来间接访问数组元素,例如在遍历数组时使用指针变量来访问。但总体而言,直接使用arr[i]
的方式是更加简洁和易懂的方法。
希望以上解答对你有帮助,如果你还有其他问题,请随时提问。
int * arr=new int[10];
这是为arr 分配一个10个元素长度的数组指针,不是访问arr[10]