在C++中有的时候定义一个数组的长度大小是由用户自己定义的,这个时候就需要声明动态数组。
声明一维动态数组:
int n ;
cin>>n;
int *a=new int[n];
声明二维动态数组:
int **a=new int*[m]; //分配一个指针数组,将其首地址保存在a中
for(int i=0;i<m;i++) //为指针数组的每一个元素分配一个数组
a[i] = new int[n]; //相当于产生了一个二维数组a[m][n]
静态声明的数组可以有公式(假设也是m行n列)
b[i][j] = b[i*n+j]
这是因为数组b是连续的一片内存,而动态内存声明的数组任意的a[k]都是一个int类型,即一个地址,所以只能a[i][j]或者(a+i)+j)来访问数组的元素,而不能a[in+j]使用。
for(int i=0;i<m;++i)
delete [] a[i];
delete []a;
网友评论