int s [][]={{1,2},{3,4,5},{6,7,8,9}};
问题1:假设有题,int s[][] 方括号内该填多少?
我的答案是[3][4]是否正确?.
问题2.假设int s[][]=new int[3][4];
那么:
System.out.println(s.length);//3
System.out.println(s[0].length);//4
System.out.println(s[1].length);//4
System.out.println(s[2].length);//4
输出3 4 4 , 也就是说分配了三行:s[0]、s[1]、s[2]
每行又分配了4个空间如:s[0]->s[0][0]、s[0][1]、s[0][2]、s[0][3]
例如:我为数组赋值->s[0][0]=1、s[0][1]=2 ,但不为s[0][2]赋值 ....
我可以获取到System.out.println(s[0][2])//输出为0;
那么换一种形式输出的结果完全不同int s [][]={{1,2},{3,4,5},{6,7,8,9}};
System.out.println(s.length);//输出3
System.out.println(s[0].length);//输出2
System.out.println(s[1].length);//输出3
System.out.println(s[2].length);//输出4
System.out.println("看是否分配空间");
//System.out.println(s[0][2]);//这句报错,溢出
System.out.println(s[1][2]);//这句是5
System.out.println(s[1][3]);]);//这句同样报错,溢出
是否可以理解为两种形式分配存储方式也不同呢?
换句话说:
int s [][]={{1,2},{3,4,5},{6,7,8,9}} 不等于 int s[][]=new int[3][4];
内存中为这种方式int s [][]={{1,2},{3,4,5},{6,7,8,9}} 的分配方式如下?
s[0] ->s[0][0](1) s[0][1](2)
s[1] ->s[1][0](3) s[1][1](4) s[1][2](5)
s[2] ->s[2][0](6) s[2][1](7) s[2][2](8) s[2][3](9)
那么int s[][]->第一个[]填3,因为是分配来三个数组,第二个[]该填多少?2 、3、4?填4的话可以取到第一个数组的3、4位为0.可实际是将这种方式变为{1,2,0,0}...与本身问题不符,原本程序是无法得到该值的,证明是错误的。填2的话第二第三个数组肯定会溢出报错。