求教 动态二维数组 和 “二维数组的区别”

碎炎 2012-04-17 04:58:07
“二维数组”,好像是数组的数组。就是在比如一个int a[3][3]这样的东西
而也可以用int ** 然后继续分配

然而他们似乎有个很大的区别: 对于[][]的实现,第一种是直接在一维的基础上通过第一维的偏移量来寻址的,即第一个[]内的数乘以第二个[]内的长度 a[1][1] 即寻址到a+3*4+1*4

动态分配的就不细说了

虽说都是数组,但是似乎很不一样,谁能给我好好的讲讲?
...全文
171 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
pathuang68 2012-04-19
  • 打赏
  • 举报
回复
归根结底,都是一维的。
左眼的眼 2012-04-19
  • 打赏
  • 举报
回复
动态二维数组其实是个指针指向的某段堆空间,第二维长度可以不同。比如
const int len = 5;
int** p = new int*[len];
for( int i = 0; i < len; i++ )
{
p[i] = new int[i+1];
}
使用完毕需要释放否则内存侧漏

二维数组是保存在栈上,前提当然是如果你在函数里声明。使用完不用管,不过太大的话小心栈溢出
碎炎 2012-04-19
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

归根结底,都是一维的。
[/Quote]

嗯 都是一维的 不过用数组名寻址 似乎因为是常量 在函数体内 栈上的话直接可以用栈指针直接计算出引用地址 而在各种函数内 通过结构体 对象的首地址计算偏移就能直接得到地址 所以在代码段内的地址是给定的
muyi66 2012-04-18
  • 打赏
  • 举报
回复
它们的构建方式不同:链式数组要用循环语句来申请内存并且需要将第一维数组各单元指向第二维各个小数组;而普通二维数组就只是直接定义出来了事。

它们的存储方式不同:链式数组不能保证整个数组的存储空间是连续的,也就不可以简单地使用memset、memcpy之类的方式去清洗、复制;而二维数组就保证存储空间是连续的,可以使用那些语句去处理它。

它们的析构方式不同:链式数组需要分别将第二维和第一维的空间逐个释放,而普通二维数组就不必你去操心它。

它们的使用方式是同样的:链式数组:p[i][j];普通数组:arry[i][j]。尽管实际寻址方式并不相同,但看起来是一样的。

它们的效果是一样的:都能达到二维阵列式存储的效果。
summer_insects 2012-04-18
  • 打赏
  • 举报
回复
int ** 和 int [][] 是不一样的
碎炎 2012-04-18
  • 打赏
  • 举报
回复
我已经知道了 二维数组的首地址 可以退化成一个指向一位数组的指针 只是个指针而已 通过指针+1寻址 是偏移指针指向元素的size 而指针的指针每次偏移均为sizeof(pointer)
Vampire_Jeremy 2012-04-17
  • 打赏
  • 举报
回复
template<class T>
void Make2DArray(T ** &x,int rows,int cols)
{

x= new T *[rows];
for(int i=0;i<rows;i++)
x[i]=new int[cols];
}
以上是动态内存分配,就是把二维数组的每一行看成一维数组!
Furney 2012-04-17
  • 打赏
  • 举报
回复
这个应该就是寻址的不同吧,具体也不是很清楚。
wangjieest 2012-04-17
  • 打赏
  • 举报
回复
第一维通过第二维的偏移来寻址的
evencoming 2012-04-17
  • 打赏
  • 举报
回复
主要是寻址方式不同。看反汇编。

写代码的时候需要注意的是,不要搞混淆这两者就行了。
也就是说当作完全不同的类型就好。否则悲剧可能发生。
_程序员 2012-04-17
  • 打赏
  • 举报
回复
那么深入?
做个记号,顺便说一句,好像二维数组中的第一维存储的是第二维中第一个元素的地址

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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