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语言二维数组的理解了,如果有错误的还请大家指正啊~

经验分享 程序员 微信小程序 职场和发展