为什么intarr=new int[10]
可以直接用arr[i]去访问
arr不是一个指针变量吗
不应该arr[i]访问嘛
[]有两个用法
一个是在数组定义或者new的时候分配长度
一个是之后访问下标对应的元素
不要混淆。
[]可以定义长度,如a[10]表示开一个长度为10的数组,里面可以存储10个元素
而[]里也可以填一个下标,如a[2]表示数组a的第三个元素,因为数组下标是从0开始的
一定记住,先定义,再使用!
比如下面这段代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[5]={0};//定义一个长度为5的数组,并初始化为0
a[0]=1;//将数组下标为0的值变成1
a[1]=1;//目前数组内,五个元素分别是:1 1 0 0 0
a[2]=2;//目前数组内,五个元素分别是:1 1 2 0 0
a[3]=a[1]+a[2];//a[1]=1,a[2]=2,a[3]=2+1=3
a[4]=a[2]+a[3];//目前数组内,五个元素分别是:1 1 2 3 5
cout<<a[4]<<endl;//输出a[4],即5
return 0;
}
int[] arr=new int[7];
问题解答:
首先,我们先了解一下数组和指针的关系。
在C/C++中,数组和指针有着密切的关系。数组是由相同类型的元素组成的集合,而指针是存储内存地址的变量。数组名本质上是一个指向数组第一个元素的指针。
当我们使用int arr[10]
定义一个数组时,内存中会分配一块连续的空间来存储这个数组的元素。此时,arr
指向数组的第一个元素。
当我们使用new
操作符来动态分配内存时,会返回一个指向新分配的内存空间的指针。
所以,当我们使用int arr = new int[10]
来动态分配一个包含10个int类型元素的数组时, arr
会指向这个新分配的内存空间的首地址。
因此,我们可以使用arr[i]
来访问数组中的元素。这是因为arr
指向的是一块连续的内存空间(数组的第一个元素地址),而arr[i]
可以被视为“从第一个元素地址开始向后移动i个元素大小的地址”,因此可以访问到对应的数组元素。
代码示例:
#include <iostream>
using namespace std;
int main() {
int* arr = new int[10];
for (int i = 0; i < 10; i++) {
arr[i] = i;
}
for (int i = 0; i < 10; i++) {
cout << arr[i] << " ";
}
cout << endl;
delete[] arr;
return 0;
}
输出结果:
0 1 2 3 4 5 6 7 8 9
在上面的示例中,我们使用new
操作符动态分配了一个包含10个int类型元素的数组,并使用arr[i]
来访问每个元素。最后,我们使用delete[]
释放了动态分配的内存空间。