二维数组问题


因为定义数组时都要先指定数组大小,我想定义一个二维数组,但大小是用户输入后确定的(即a[m][n],m,n是用户输入的数值),并不是一开始就指定,请问这应该怎麽办?如果用动态分配内存的函数解决,那应该怎麽用?谢谢!

7 个解决方案

#1


gz...

#2


如果你用的是标准C恐怕不行,因为在数组的定义中明确给出,这种定义是不可以的。

#3


cin>>m;
cin>>n;
int** dfg;
dfg=new int*[m];
for(int i=0;i<m;i++)
dfg[i]=new int[n];

#4


动态分配一段空间,大小为m*n*sizeof(Elemtype),然后看有什么实际的用途,如果要当数组来用的话,有很多办法,其一就是采用循环嵌套,外层是0到m,内层是0到n。还有一种是当成一维数组,它的序号为s,则行数是int(s/m),列数是s/m的余数,用模运算就可以求,要不然也可以用数组指针,共m个,每个指向一个有n个元素的一位数组。关键是看实际拿它来干什么。

#5


可以用指针的指针,比如:
#include <iostream>

using namespace std;

int main()
{
int **a;
int n,m;           //欲实现a[n][m]
 
cout<<"请输入行数:";
cin>>n;

a=new int*[n];
cout<<"请输入列数:";
cin>>m;
for(int i=0;i<n;++i)
{
a[i]=new int[m];
cout<<"请输入第"<<i+1<<"行的元素:\n";
for(int j=0;j<m;++j)
cin>>a[i][j];
}

cout<<"结果如下:";
for(i=0;i<n;++i)
{
cout<<endl;
for(int k=0;k<m;++k)
cout<<a[i][k]<<"\t";
}

return 0;
}

还可以先用一维数组实现动态分配内存空间,然后在“转发”给二维数组,虽然不提倡,但也是解决方法之一。
最后,还要说的是,vector就是专门用来解决楼主所提之类问题而设计的,所以用vector也可以,这里再不举例。

#6


同意楼上的。

申请一个**p , 然后动态分配。

#7


请问sunjx119(睿锐)“vector”是什么?如果不用C++用C可以实现吗?还有就是怎样进行动态分配?

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: