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

比较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中二维数组的比较,有什么不对之处欢迎指正!!!
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
主要内容: 1. 数组的定义 2. 数组的分类[按维数] 3. 数组的用法 4. 数组的常见操作 java的foreach实现方式 一维数组 1. 定义:省略 2. 用法: 声明并赋值: //方法一:先声明,再赋值 int [] arr=new int[5]; arr[0]=10; arr[4]=100; arr[5]=10;//语法无误,编译时报错:java.lang.ArrayIndexOutOfBoundsException System.out.println(arr[5]);//语法无误,编译时报错:错误同上 //方法二:使用for循环动态赋值 //导入java.util.*;包 Scanner input=new Scanner(System.in); int [] arr=new int[5]; for(int i=0;i<arr.length;i++) { System.out.println("请输入第"+(i+1)+"个值"); arr[i]=input.nextInt(); } //方法三:声明时赋值 int [] arr=new int[]{23,45,56,67}; int [] arr1={23,45,56,67}; int [] arr2= new int[5]{23,45,56,67};//错误,此时不能给确定的长度 输出: int [] arr=new int[]{23,45,56,67}; //方法一:使用for循环输出 for(int i=0;i<arr.length;i++) { System.out.println(arr[i]); } //方法二:使用foreach输出:此为JDK5.0 新特性 for(int item : arr) { System.out.println(item); } 常见算法: 1. 求一维数组的最大[小]值 2. 求一维数组的总和,平均值 3. 添加,删除,修改,搜索等 具体请参考本人FTP\\5.0S1\\JAVA\\数组完整操作范例。[重复让人如此崩溃!] 二维数组 1. 定义:省略 2. 用法: 声明并赋值: //声明时赋值 int [][]arr={ {1,2,3}, {4,5,6}, {7,8,9} }; 输出: //方法一:使用嵌套for循环输出二维数组 for(int i=0;i<3;i++) { for(int j=0;j<3;j++) { System.out.print(arr[i][j]+" "); } System.out.println(); } //方法二:使用嵌套foreach输出二维数组 for(int row[] :arr) //此时不难看出,二维数组可以看作是每个元素都是一个一维数组的一维数组 { for(int item: row) { System.out.print(item+ " "); } System.out.println(); } 补充: //动态创建规则二维数组 int R=10;//行 int N=5;//列 int [][]arr=new int ­[N]; //动态创建不规则二维数组 int arr[][]; arr=new int[2][]; arr[0]=new int[10]; arr[1]=new int[5]; 赋值都一样:此处省略! 算法体验:杨辉三角 int i,j; int a[][]=new int[10][10]; //给每行的第一列,及对角线处均赋值为1 for(i=0;i<10;i++) { a[i][0]=1; a[i][i]=1; } //从arr[2][1]=a[1][0]+a[1][1]; //推出:a[i][j]=a[i-1][j-1]+a[i-1][j]; //即元素等于两肩之和 for(i=2;i<10;i++) { for(j=1;j<i;j++) { a[i][j]=a[i-1][j-1]+a[i-1][j]; } } for(i=0;i<10;i++) { for(j=0;j<=i;j++) { System.out.print(a[i][j]+" "); } System.out.println(); }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值