社区
C++ 语言
帖子详情
求教 动态二维数组 和 “二维数组的区别”
碎炎
2012-04-17 04:58:07
“二维数组”,好像是数组的数组。就是在比如一个int a[3][3]这样的东西
而也可以用int ** 然后继续分配
然而他们似乎有个很大的区别: 对于[][]的实现,第一种是直接在一维的基础上通过第一维的偏移量来寻址的,即第一个[]内的数乘以第二个[]内的长度 a[1][1] 即寻址到a+3*4+1*4
动态分配的就不细说了
虽说都是数组,但是似乎很不一样,谁能给我好好的讲讲?
...全文
171
11
打赏
收藏
求教 动态二维数组 和 “二维数组的区别”
“二维数组”,好像是数组的数组。就是在比如一个int a[3][3]这样的东西 而也可以用int ** 然后继续分配 然而他们似乎有个很大的区别: 对于[][]的实现,第一种是直接在一维的基础上通过第一维的偏移量来寻址的,即第一个[]内的数乘以第二个[]内的长度 a[1][1] 即寻址到a+3*4+1*4 动态分配的就不细说了 虽说都是数组,但是似乎很不一样,谁能给我好好的讲讲?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
那么深入?
做个记号,顺便说一句,好像二维数组中的第一维存储的是第二维中第一个元素的地址
php 获取
二维数组
的某个,PHP 如何获取
二维数组
中某个key的集合(高性能查找)
分享下PHP 获取
二维数组
中某个key的集合的方法。具体是这样的,如下一个
二维数组
,是从库中读取出来的。代码:$user = array(0 => array('id' => 1,'name' => '张三','email' => 'zhangsan@sina.com',),1 => array('id' => 2,'name' => '李四','emai...
萌新
求教
二维数组
的最小值及索引
System.out.println("最小值所在列:" + mincolinindex);System.out.println("最小值所在行:" +minrowindex);System.out.println("最小值为:" + min);System.out.println("
二维数组
元素如下:");这个写出来之后的结果无尽。
java怎么向
二维数组
赋值_如何给JAVA
二维数组
赋值
该楼层疑似违规已被系统折叠隐藏此楼查看此楼从文件里取出数据 按行存在一维数组里面 如何存进
二维数组
我们方法显示不出来
求教
public static void main(String[] args) throws IOException{BufferedReader reader=new BufferedReader(new FileReader("d:/data.t...
java
二维数组
双重循环赋值,如何给JAVA
二维数组
赋值
该楼层疑似违规已被系统折叠隐藏此楼查看此楼从文件里取出数据 按行存在一维数组里面 如何存进
二维数组
我们方法显示不出来
求教
public static void main(String[] args) throws IOException{BufferedReader reader=new BufferedReader(new FileReader("d:/data.t...
matlab 生成
二维数组
,
求教
:C++如何将
二维数组
传递给matlab生成的dll
直接上代码:来自MATLAB®C++ Math Library User’s Guidedouble real[] = { 1, 2, 3, 4 };double imag[] = { 5, 6, 7, 8 };mwArray A(2,2,real,imag);mwArray(int32 rows, int32 cols, double *real, double *imag = 0):Creat...
C++ 语言
64,654
社区成员
250,484
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章