如何输入一个二维数组 长度不定C++

比如 a[m][n],m和n未知,由用户定,可以用动态存储分配么,急啊

两种方法,简单一点的,C++允许动态定义数组,所以可以这样#include <iostream>
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 <<endl;
}
}

复杂一点的,完全动态分配
#include <iostream>
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 <<endl;
}

for(i = 0; i < m; i ++)
delete []a[i];
delete []a;
}

效果相同
对于mn比较大的情况,推荐用第二种追问

用第二种方法 ,怎么能把它变成一个返回值是二维数组的函数啊

追答

int ** func(int *m, int *n)
{
int ** a;
//申请内存
//也可以在这里输入数值
//注意 维度m n必须返回到上一层 不然不知道数组大小
return a; 直接返回即可
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-07-02
C++数组申明时必须知道数组长度,所谓动态数组其实是申明一个指针指向一个数组。数组使用NEW来申请内存空间,一楼说的第一种方法在某些编译器可以。第二种是对的
第2个回答  2013-07-02
int **a;
int m,n;
cin>>m>>n;
*a=new int[m];
for(int i=0;i<m;i++){
a[m]=new int[n];
}
第3个回答  2013-07-02
申请一个动态的二维数组:
int m, n;
cin>>m>>n;
int **a = new int* [m];
for(int i=0; i<m; i++) {
a[i] = new int[n];
}
相似回答