java和C语言定义二维数组的区别
刚开始学的编程语言是C语言,记得当时对二维数组的定义可以省略行数,不能省略列数,今天用java的时候这么定义发现报错了,在网上查了下,发现java恰恰相反,可以省略列数,却不能省略行数。下面是我查阅了一些资料后的理解。 C语言定义二维数组 C语言在定义二维数组的时候,可以省略行数,但不能省略列数。 下面看代码示例
#include <stdio.h> int main (void){ int a[][3]={ {1,2,3},{4,5,6},{7,8,9}}; //int a[3][]={ {1,2,3},{4,5,6},{7,8,9}}; }
在编译器中运行,前者可以通过,后者报错。 这主要是因为C语言关于二维数组的定义。C语言中二维数组的每个元素都是相同大小的一维数组。所以只要确定了列数,再根据定义的时候用到的行数,就可以给出占用的内存。但如果在定义的时候没有说明列数,就会导致内存出错。
java定义二维数组
和C语言相反,java定义二维数组可以省略列数,不可以省略行数。这也和java对二维数组的定义有关系。 下面看代码讲解
//静态定义二维数组 int a[][]= { {0,1,2,3,4,5,6},{0,1,2,3,4,5,6,7,8,9}}; System.out.println(a.length); System.out.println(a[0].length); System.out.println(a[1].length);
运行结果是2,7,10 可以看出Java中二维数组是数组的数组。它并不要求每一个一维数组的大小一致,所以也就不能在定义的时候说明列数。那Java的二维数组的存储是一个怎样的过程? Java二维数组的数组名存放在栈里,而堆里存放具体的数据。我们在定义的时候先在栈里申请行数,然后具体需要用到哪一个一维数组的时候再申请堆的内存。所以可以省略列数,不能省略行数。 下面看代码示例
//这种定义是可以的 int a[][]=new int [2][]; a[0]=new int [6]; a[1]=new int[3]; System.out.println(a.length); System.out.println(a[0].length); System.out.println(a[1].length); //这种定义会报错 //int a[][]=new int [][2];
这就是我对Java和C语言二维数组的理解了,如果有错误的还请大家指正啊~