A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 古银平 中级黑马   /  2012-5-18 14:31  /  1997 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

int[][]=new int[3][4]中,在堆内存中是不是定义了两个一位数组?不是很理解?

6 个回复

倒序浏览
呵呵 直接上图说明:

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
首先明确一点,楼主你的数组命名错了,只给出二维数组,却没给数组起名字。呵呵。
以int[][] arr=new int[3][4]为例好了,剖析一下这个吧,首先在栈中创建了一个类型为int数组的变量arr,然后在堆中开辟了一块儿名为new int[]数组结构的内存空间,初始值都为null,它里边包含了3个一维数组,每个一维数组里边的元素都是4个。哦了吧?
回复 使用道具 举报
本帖最后由 李文富 于 2012-5-18 15:35 编辑

恩,对于这个问题涉及到底层操作,首先得明白二维数组并不是说定义两个一维数组来拼接成二维数组,在内存中数组都是使用连续地址来存放的,可能我要和你讲下指针这个概念用于二维乃至多维数组的作用;如:int[][] 这里int[]在编译的时候是一个指针而不是一个一维数组,后面的那个[]才是代表数组;举个例子:假如军队里有一个连队,一个连队有3个排长每排10,你就是这个连的连长。要找连队里的张三(2排10号)时,你先找到张三所在排的排长,然后从这个排里找到张三这个人;我们实现这个例子时,定义 int[2][9] 下标从0起;这时int[0]指向第一排排长所在内存位置,int[0][0]表是第一个排长,同理int[1] ,int[1][0],所以张三的位置是int[2][9];
这样能明白不?
补充下多维数组,也就把更多int[][][]..[]看成是级联的指针;
回复 使用道具 举报
       内存是一段连续的空间,是按地址从低到高来存储数据的,来一个数就将其按地址的顺序存储到相应位置,这就说明内存在存储二维数组时,不可能像我们看到的那样,真的开辟一个矩阵的存储空间来存储它。而是将二维数组中的元素,按照选定的存储顺序:行优先或列优先,将其元素一个一个的存储到内存的一段连续地址码中
      按行优先:先存a[0][0],再存a[0][1],再存a[0][2],再存a[0][3],依次存完第一行,再存储第二行的元素,方法一样
      按列优先:先存a[0][0],再存a[1][0]。再存a[2][0],再存a[3][0],依次存完第一列,在存储第二列的元素,方法相同
在存储时每个元素都对应唯一的一个地址,所以当要取二维数组中的某个元素时,也会很容易找到对应的值,二维数组的存储就是这样的,其实就是在一维数组的基础上,增加了一个行优先或列优先的存储机制而已,实质都差不多,都是将数组中的元素存储到一段连续的内存地址上,都是线性存储的
回复 使用道具 举报
int[][]=new int[3][4]
没有数组名:格式:元素类型[] 数组名=new 元素类型[元素个数或数组长度];
应该是int[][] arr=new int[3][4]
不用想太多一样的,3是几个一维数组,4是一维数组里面的个数有几个?
一共个数3*4=12
表示是从下标0开始:arr [0][0],arr [0][1],arr [0][2],arr [0][3];
                           arr [1][0],arr [1][1],arr [1][2],arr [1][3];
                           arr [2][0],arr [2][1],arr [2][2],arr [2][3];
这样一次存放....................................
一维就不用解释了int[]x= new int[3]   里面三个元素:x[0],x[1],x[2];...................
这么直白明白否?
回复 使用道具 举报
杨康 中级黑马 2012-5-18 19:02:04
7#
int[][] a = new int[3][4]这个意思是定义了一个名为a的int型的二维数组,第一个[3]表示的是这个二维数组的长度是3,是由3个一维数组构成的,也就是说这个二维数组的角标[0][4],[1][4],[2][4],每个角标位里都是一个一维数组。而定义的第二个中括号[4],是你定义的二维数组里包含的一维数组的长度,也就是说你每个一维数组的长度都是4。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马