黑马程序员技术交流社区

标题: 关于二维数组的一点疑问 [打印本页]

作者: 焦志鹏    时间: 2012-10-11 07:58
标题: 关于二维数组的一点疑问
(1)int[][] arr = new int [3][4]
       s.o.p (arr[0]);   //此时输出的是一维数组的地址
(2)int[][] arr =new int [3][]
       s.o.p (arr[0]);   //此时输出的是null

数组是引用数据类型,第二种情况中,3个一维数组都默认初始化值为null

疑问:可不可以这样理解:

第一种情况确定了每个一维数组的长度,所以全都初始化为0,故arr[0]指向了一个初始化值为{0,0,0,0}的数组,故显示的是它的地址;
第二种情况不确定每个一维数组的长度,没办法指向一个确定的数组的地址,故初始化值为null;

这样理解有没有什么问题
作者: qhasilver    时间: 2012-10-11 08:38
我就是这样理解的,不晓得别人有什么高见
作者: 李兆宁    时间: 2012-10-11 08:43
应该是的,可以全部都分两步看,第一个确定了一个数组后,又给此数组赋值了一个确定的数组,
像是:int x=1;
第二个,确定一个数组,只知道里面的元素是数组,但不知道具体是几个元素的数组
像是:int x;  并没有赋值,只确定了类型。。。

个人理解。。期待高手确认。
作者: 胡高德    时间: 2012-10-11 09:15
你那么理解能行,还有一种方法就是你把声明的数组想像成一张表格,就好比你的
(1)int[][] arr = new int [3][4]
       s.o.p (arr[0]);   //此时输出的是一维数组的地址
(2)int[][] arr =new int [3][]
       s.o.p (arr[0]);   //此时输出的是null
第一个就可以理解成为做了一张横三竖四的表格;
第二个可以想像成一个横三,竖为NULL的表格。
因为理解多维数组最好的方法就是把它想象成一张表格。希望对你有帮助。
作者: 朱金林    时间: 2012-10-11 10:36
二维数组就像一个Excel的那样的表格
int[][] arr = new int [3][4]//可以这样理解new后面[行][列],也就是说第一个是3行4列
  (2)int[][] arr =new int [3][]
       s.o.p (arr[0]);   //第二个和LS的解释一样




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2