两种方法,简单一点的,C++允许动态定义数组,所以可以这样#include
using namespace std;
int main()
{
int m, n;
cin >> m >> n;
int a[m][n];
int i, j;
for(i = 0; i < m; i ++)
for(j = 0; j < n; j ++)
cin >> a[i][j];
cout << "print:\n";
for(i = 0; i < m; i ++)
{
for(j = 0; j < n; j ++)
cout << a[i][j]<< ' ';
cout <
}
复杂一点的,完全动态分配
#include
using namespace std;
int main()
{
int m, n;
int i, j;
cin >> m >> n;
int ** a;
a = new int * [m];
for(i = 0; i < m; i ++)
a[i] = new int [n];
for(i = 0; i < m; i ++)
for(j = 0; j < n; j ++)
cin >> a[i][j];
cout << "print:\n";
for(i = 0; i < m; i ++)
{
for(j = 0; j < n; j ++)
cout << a[i][j]<< ' ';
cout <
for(i = 0; i < m; i ++)
delete []a[i];
delete []a;
}
效果相同
对于mn比较大的情况,推荐用第二种
C++数组申明时必须知道数组长度,所谓动态数组其实是申明一个指针指向一个数组。数组使用NEW来申请内存空间,一楼说的第一种方法在某些编译器可以。第二种是对的
int **a;
int m,n;
cin>>m>>n;
*a=new int[m];
for(int i=0;i
}
申请一个动态的二维数组:
int m, n;
cin>>m>>n;
int **a = new int* [m];
for(int i=0; i
}