怎样才可以动态生成一个二维数组???

michaelli 2003-11-08 01:32:15
在c++中到底怎样才可以动态生成一个二维数组???
...全文
71 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
michaelli 2003-11-09
  • 打赏
  • 举报
回复
还是bambooshan(bambooshan) 的正确,
谢谢各位了,天冷了,祝大家身体健康
bambooshan 2003-11-08
  • 打赏
  • 举报
回复

阿明的有点错,应该如下:

建立二维数组a[m][n]
代码如下:
{int **a;
a=new int *[m];
for(int j=0;j<n;j++)
a[j]=new int[n];}
我试过,你们可以验证一下呀。

ssbull 2003-11-08
  • 打赏
  • 举报
回复
关注
kitigesh 2003-11-08
  • 打赏
  • 举报
回复
re
liem 2003-11-08
  • 打赏
  • 举报
回复
int *Build2DArray(int m,int n)//建立m行n列的二维数组
{
int **array=new int(m);
for(int i=0;i<m;i++)
*array[i]=new int(n);
return array;
}
返回类型改为int **
Tangyongkang 2003-11-08
  • 打赏
  • 举报
回复
关注,这问题也搞得我很郁闷
michaelli 2003-11-08
  • 打赏
  • 举报
回复
报错:cannot convert from 'int *' to 'int **
michaelli 2003-11-08
  • 打赏
  • 举报
回复
多谢adams_here(lost in Lost)

to zhouqingyuan(浪帆):
编译通过不了啊


分不够再加
adams_here 2003-11-08
  • 打赏
  • 举报
回复
zhouqingyuan(浪帆)方法真不错,学习。不过我始终认为没有必要用两个坐标访问(顽固不化),如果是三维,四维呢,这个算法复杂性就高了。但是这是一个很好的算法。
yndfcd 2003-11-08
  • 打赏
  • 举报
回复
int* pData = new int[m*n];

int(* array)[n] = static_cast<int (*)[n]>(pData);
zhouqingyuan 2003-11-08
  • 打赏
  • 举报
回复
int *Build2DArray(int m,int n)//建立m行n列的二维数组
{
int **array=new int(m);
for(int i=0;i<m;i++)
*array[i]=new int(n);
return array;
}//大致是这样了,自己再看看,有没有修改的地方
adams_here 2003-11-08
  • 打赏
  • 举报
回复
如果你非要以arrayDynamic[i][j]的形式访问,这倒难倒我了,暂时想不出什么方法来。数组的定义是要在编译时就要知道大小的,动态实现恐怕不行。
另外,书上的定义说“下标是数组元素到数组开始的偏移量”。我觉得正确理解这句话就能动态生成了,只要知道偏移量就可以访问任意的元素,而究竟是几维,全在你的喜恶,在内存空间中其实就是一维的。
adams_here 2003-11-08
  • 打赏
  • 举报
回复
呵呵。其实楼主为何这么在意是arrayDynamic[i]还是arrayDynamic[i][j]呢?arrayDynamic[i]可以用来访问任意维的数组阿,只要你的i是计算准确的,是你想要取的那个值就可以了。
michaelli 2003-11-08
  • 打赏
  • 举报
回复
谢谢楼上的,我知道数组是连续存放的,
但是,比如说
cin>>n;//从键盘输入一个n
int * arrayDynamic = new int(n);
就可以生成一个一维数组,访问的时候arrayDynamic[i]就行,
那么有没有办法生成动态二维数组,用arrayDynamic[i][j]访问呢???
adams_here 2003-11-08
  • 打赏
  • 举报
回复
我不知道你具体的情况怎样,不过可以有很多方法,殊途同归。
无论是几维数组,在内存空间都是一个个连续存放的,都可以看成一维的。
所以可以这样:
int * arrayDynamic = new int(row*col);//row,col分别是你要生成的数组的行列数
然后就可以像数组一样使用了。
for(int i=0;i<row;i++){
for(int j=0;j<col;j++){
arrayDynamic[i*col+j]=i+j;
cout<<arrayDynamic[i*col+j]<<endl;
}
}
不过有个不好的地方是,因为arrayDynamic是指针,所以用arrayDynamic[i]可能会超出你想要得范围之外,到达数组以外的内存空间。因此有必要检查坐标是否越界。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧