比较C语言与Java中的二维数组

来源:互联网 发布:会员卡软件多少钱 编辑:程序博客网 时间:2024/05/18 20:51

比较C语言与Java中的二维数组

                虽然Java的很多基础知识与C语言中的都差不多,但是今天学了Java的二维数组之后才赫然发现原来C语言与Java中的二维数组是截然不同的。今天我们就来比较比较C语言与Java中的二维数组。
                首先,我们先来看看C语言中的二维数组,C语言中的二维数组相信很多人都能够理解,也就是一维数组的扩展,定义与赋值方式也是和一维数组差不多,定义好后赋值与一维数组的赋值方式也是一样的,只是从键盘输入时,一维数组是只用一个for循环,而二维数组则是两个for循环。下面我们来看一组图来加深我们的理解:
 首先是一维数组的定义:
     
                 一维数组很简单,相信学过C语言的都知道,我就不详细的解释了,接下来就是二维数组,其实二维数组就是很多行一维数组拼起来的样子,就相当于一维数组就像一条线,而二维数组就像一个面,下面来看看二维数组的定义:

                这便是二维数组的定义,学过C语言的同学都知道,数组下标是从0开始的,所以定义时要比下标多一个,比如你数组的下标最后一个是n,那你定义时中括号里就要写n+1,当然也可以第一个中括号为空,可是第二个中括号必须要有数字,因为这个二维数组的元素个数是列*行,因为你确定了列,自然行就确定了。
                知道一维及二维数组的定义后,现在我们来对它们进行赋值,一维数组的赋值很简单,就是后面跟个花括号,然后花括号里写上自己需要赋的值的元素,每一个元素之间要用“,”隔开,比如:a[5]={0,1,2,3,4}。在实际的应用中,图片中的n+1需要是一个具体的数字,而且,赋值时元素个数只能小于或等于中括号里的数字,否则就会出现数组越界。
                 二维数组的赋值有两种方法,一个就是定义的时候直接初始化,这个与一维数组的赋值有点差不多,还有一个就是用for循环从键盘输入逐一的来给二维数组赋值,这个与一维数组不同的是要用两个for循环:
#include <stdio.h>void main(){    int a = 1;    int i;    int j;    int arr[2][3];    for(i=0; i<2; i++)    {        for(j=0; j<3; j++)        {            scanf("%d",&arr[i][j]);        }    }    for(i=0; i<2; i++)    {        for(j=0; j<3; j++)        {             printf("%d",arr[i][j]);        }    }}
                C语言的二维数组差不多就是这些知识点,至于Java的二维数组,最大的不同之处就在于二维数组的定义,由于Java主张的是面向对象,而C语言主张的是面向过程的思想,所以在二维数组的定义上是会有一些不同的,主要的区别在于存储方式的不同,同样我们用一张图来帮助理解:

                这就是Java中的二维数组在内存中的状态,这里用到了降维的思想,将二维数组降到了一维的状态下去处理,在定义二维数组时用到了两块内存栈和堆,栈里主要是放数组名,而堆里就是用来存放具体的数据,从图里我们可以看出,数组名指向堆内存里的元素,而里面的元素被分成了一维数组拼起来的状态,实际上就是二维数组,而访问数组的方式就与C语言中的完全不一样。Java中如果要想查第i行的元素个数就直接访问数组的第i个数据如:b[i].length。如果想要查行数就直接访问数组名如:b.length。
现在再来看看Java中的二维数组定义的代码:
int[][] arr=new int[5][];
                这里要说的是那个中括号里的“5”字不能省略,也不是说必须填“5”,而是那个中括号不能空,必须要填一个数字。因为从图上可以看出如果那个中括号为空的话数组名所指的 内存就找不到了,所以就不能给数组分配空间了,当然还有一个方法就是定义时直接赋初值那个“5”就可以不要了。                                                                        
                要说C语言与Java中二维数组最大的不同之处就是C语言是面向过程的思想,而Java是面向对象的思想,所以Java在定义二维数组时需要先申请一块内存。
                以上就是我总结的C语言与Java中二维数组的比较,有什么不对之处欢迎指正!!!
原创粉丝点击