C++二维数组的动态声明

时间:2022-07-29 13:44:26

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[i*n + j]使用。

动态声明的数组,使用后需要释放内存。

for(int i = 0; i < m; ++i)

delete []a[i];

delete []a;

 #include <iostream>
#include <stdlib.h> using namespace std; int main()
{
int row,column;
cin >> row >> column;
//申请空间
int **a = new int* [row];
for(int i = ; i < row; i++)
a[i] = new int[column]; //使用空间
for(int j = ; j < row; j++)
for(int k = ; k < column; k++)
a[j][k] = rand() % ; for(int j = ; j < row; j++)
{
cout << endl;
for(int k = ; k < column; k++)
cout << a[j][k] << " ";
}
//释放空间
for(int i = ; i < row; i++)
delete []a[i];
a = NULL; return ;
}
  //方法二,利用vector创建二维数组
#include <iostream>
#include <stdlib.h> using namespace std; {
int row,column;
cin>>row>>column;
//申请空间
vector<vector<int> > a(row,vector<int>(column)); //使用空间
for(int j = ;j < row;j++)
for(int k = ;k< column;k++)
a[j][k] = rand()%; for(int j = ;j < row;j++)
{
cout<<endl;
for(int k = ;k< column;k++)
{
a[j][k] = rand()%;
cout<<a[j][k]<<" ";
}
}
return ;
}