C数组
一维数组:

定义方式:
datatype arrayname[length]
数组是一个整体,在内存中是连续的;

初始化:
1:可以只给部分赋值
int a[5] = {1,2}; 剩下的自动赋值为0
2:如果给全部元素赋值,那么在数组定义时可以不给出数组长度
int a[] = {1,2,3,4};

二维数组:
在内存中是连续排列的,按行排列。

初始化:
1:按行分段赋值
int a[2][2] = {{1,2},{3,4}};
2:按行连续赋值
int a[2][2]= {1,2,3,4};
3:可以只对部分赋值,未赋值的自动取0
int a[3][3] = {{1}, {2}, {3}};
4),如对全部元素赋初值,则行数可以不给出,但列必须给出
int arr[][3] = {1,2,3,4,5,6,7,8,9};

Java数组:
必须规定数组的长度,且数组长度终生不变
数组必须先初始化才可以使用,初始化的时候会分配内存;动态初始化和静态初始化不能同时存在。

一维数组:

动态初始化:
只指定数组的长度,具体数据不指定
数据类型[] 数组名 = new 数据类型[数组长度];
int sy[] = new int[10];
静态初始化:
定义数组时,直接指定各个元素的值,由元素的个数决定数组的长度。
数据类型[] 数组名 = new 数据类型[]{1,2,3,4};
int[ ] a = {1,2,3,4,5};
注意:在Java程序中声明数组时,无论用何种方式定义数组,都不能指定其长度。如以“int a[5];”方式定义数组将是非法的,该语句在编译时将出错。
二维数组:
特点是在堆内存中,各个一维数组的元素是连续的,但各个一维数组之间不是连续存放的。
动态初始化:

数据类型 [ ][ ] 数组名 = new 数据类型[行数][列数];
int [ ][ ] a = new int [3][4];
虽然在应用上很像C语言中的多维数组,但还是有区别的,在C语言中定义一个二维数组,必须是一个m*n二维矩阵块,如图1所示。Java语言的多维数组不一定是规则的矩阵形式,如图2所示。

图1.C语言中二维数组必须是矩形

图2.Java语言的二维数组不一定是矩形
如,定义如下的数组:
int [ ][ ] x;
它表示定义了一个数组引用变量x,第一个元素为x[0],第n个元素变量为x[n-1]。x中从x[0]到x[n-1]的每个元素变量正好又是一个整数类型的数组引用变量。需要注意的是,这里只是要求每个元素都是一个数组引用变量,并没有要求它们所引用数组的长度是多少,也就是每个引用数组的长度可以不一样。如:
int [ ][ ] x;
x = new int [3][ ];
Java 这两句代码表示数组x有三个元素,每个元素都是int[ ]类型的一维数组。相当于定义了三个数组引用变量,分别是int[ ] x[0]、int[ ] x[1]和int[ ] x[2],完全可以把x[0],x[1]和x[2]当成普通变量名来理解。
由于x[0]、x[1]和x[2]都是数组引用变量,必须对它们赋值,指向真正的数组对象,才可以引用这些数组中的元素。如
x[0] =new int[3];
x[1] =new int[2];
由此可以看出,x[0]和x[1]的长度可以是不一样的,数组对象中也可以只有一个元素。
程序运行到这之后的内存分配情况如图3所示。

图3 Java中的二维数组可以看成是多个一维数组
注意:二维数组要求必须指定高层维数,举例说明:
正确的申请方式:只指定数组的高层维数,如:
int [ ][ ] smily = new int[9][ ];
正确的申请方式:指定数组的高层维数和低层维数,如:
int [ ][ ] smily = new int[9][5 ];
如果想直接在声明二维数组时就给数组赋初值,可以利用大括号实现,只要在数组的声明格式后面再加上初值的赋值即可。其格式如下:
数据类型 [ ] [ ]数组名={ {第1行初值},
{第2行初值},
{ … },
{第n+1行初值} };
同样需要注意的是,用户并不需要定义数组的长度,因此在数据类型后面里并不必填写任何的内容。此外,在大括号内还有几组大括号,每组大括号内的初值会依次赋值给数组的第1、2.……n+1行元素。如:
int [ ] [ ] a = { {11,22,33,44}, //二维数组的初始赋值
{66,77,88, 99} };
该语句中声明了一个整型数组a,该数组有2行4列共8个元素,大括号里的两组初值会分别依次指定给各行里的元素存放,a[0][0]为11,a[0][1]为22, …a[1][3]为99.
注意:与一维数组一样,在声明多维数组并初始化时不能指定其长度,否则出错。
如"int [2[3] b={ {1,2,3},{4,5,6} };",该语句在编译时将出错。
三维以上的多维数组
通过对二维数组的介绍,不难发现,要想提高数组的维数,只要在声明数组的时候将下标与中括号再加一组即可,所以三维数组的声明为"int[ ] [ ] [ ] a;",而四维数组为"int[ ] [ ] [ ] [ ] a;".以此类推.
使用多维数组时,输入、输出的方式和一、二维数组相同,但是每多一维,嵌套循环的层数就必须多一层,所以维数越高的数组其复杂度也就越高。

不要被自己感动。没用
只有你足够与众不同,你才能足够被需要。
自以为是是人类的原罪。
加油哦!

Java数组与C/C++数组的区别的更多相关文章

  1. C++和Java多维数组声明和初始化时的区别与常见问题

    //C++只有在用{}进行初始化的时候才可以仅仅指定列数而不指定行数,因为可以通过直接//初始化时的元素个数自动计算出行数.而仅声明/创建数组而不初始化时,Cpp要求必须写明//行数和列数才能够创建数 ...

  2. java提高篇(十八)-----数组之一:认识JAVA数组

          噢,它明白了,河水既没有牛伯伯说的那么浅,也没有小松鼠说的那么深,只有自己亲自试过才知道!道听途说永远只能看到表明现象,只有亲自试过了,才知道它的深浅!!!!! 一.什么是数组      ...

  3. java如何在一个有序的数组类插入一个数!

    第一种:依次与有序数组中的每个数进行比较,然后找到位置之后,定义一个新的数组,该信数组的长度加一,再使用system.arraycopy将于数组copy到新数组!import java.util.Ar ...

  4. Java数组之二维数组

    Java中除了一维数组外,还有二维数组,三维数组等多维数组.本文以介绍二维数组来了解多维数组. 1.二维数组的基础 二维数组的定义:二维数组就是数组的数组,数组里的元素也是数组. 二维数组表示行列二维 ...

  5. java基础5 (一维)数组和二维数组

    本文知识点(目录): 一维数组(一维数组的概念.优点.格式.定义.初始化.遍历.常见异常.内存分析以及常见操作(找最大值.选择排序.冒泡排序等等))    二维数组(二维数组的遍历.排序.查找.定义. ...

  6. 牛客网Java刷题知识点之数组、链表、哈希表、 红黑二叉树

    不多说,直接上干货! 首先来说一个非常形象的例子,来说明下数组和链表. 上体育课的时候,老师说:你们站一队,每个人记住自己是第几个,我喊到几,那个人就举手,这就是数组. 老师说,你们每个人记住自己前面 ...

  7. Java探索之旅(10)——数组线性表ArrayList和字符串生成器StringBuffer/StringBuilder

    1.数组线性表ArrayList 数组一旦定义则不可改变大小.ArrayList可以不限定个数的存储对象.添加,插入,删除,查找比较数组更加容易.可以直接使用引用类型变量名输出,相当于toString ...

  8. Java基础之十六 数组

    数组:可以创建并组装它们,通过使用整型索引值访问它们的元素,并且它们的尺寸不能改变. 16.1 数组为什么特殊 数组与其他种类的容器之间的区别有三方面:效率,类型和保存基本类型的能力. 数组是一种效率 ...

  9. Java一维与二维数组的拷贝与排序

    Java一维与二维数组的拷贝与排序 目录 Java一维与二维数组的拷贝与排序 Arrays.sort() 一维数组升序排序 二维数组按行升序排序 二维数组按列升序排序 Java中的数组 Java中数组 ...

随机推荐

  1. QHDYZ模拟赛20191012

    今天信息处老师(并不是教练,基本等于机房看门大爷) (好吧老师其实很犇,软件什么的厉害的一批,只是不能带oi--) 跟我说:"xxj,过两天月考完了,可以在初赛前再整一次模拟赛,一天,三道题 ...

  2. [UWP] 为WinRT组件创建Nuget包

    Nuget 是 dotnet 开发中必不可少的包管理工具,但不仅仅局限于 dotnet 项目,在 VS 中使用 C++ 开发的时候,也可以使用 Nuget 来引用第三方组件.同样也可以用 Nuget ...

  3. python设置环境变量(临时和永久)

    设置临时环境变量 import os # 设置环境变量 os.environ['WORKON_HOME']="value" # 获取环境变量方法1 os.environ.get(' ...

  4. 深度学习tensorflow实战笔记(1)全连接神经网络(FCN)训练自己的数据(从txt文件中读取)

    1.准备数据 把数据放进txt文件中(数据量大的话,就写一段程序自己把数据自动的写入txt文件中,任何语言都能实现),数据之间用逗号隔开,最后一列标注数据的标签(用于分类),比如0,1.每一行表示一个 ...

  5. Vue使用antV G2制作看板

    工作中需要制作一个看板,选型选用antV G2进行开发. 由于项目前端是使用Vue,于是研究了antVG2在Vue中的使用. 1.安装antv/g2 npm install @antv/g2 --sa ...

  6. NOI导刊集训感言

    圆溜溜,尤其首先,集训的收获很大,远远比自学要来的快 其次,新知识点到时没怎么讲(A*,数论除外,倒是真的学会不少以前碰都不敢碰的定理呀,结论之类的东西),但是还是深深地感受到了集训的困难,七天的节奏 ...

  7. day 1 堆 hash 线段树 树状数组 冰茶姬 字典树 二叉查找树

    来郑州的第二天,早上开始也没说什么就说了些注意安全,各种各样的注意安全... 冰茶姬: 原来再打食物链时看了一下冰茶姬,只注意了路径压缩,没想到还有什么按秩排序但确实快了不少... int find( ...

  8. CDQ分治(学习笔记)

    离线算法——CDQ分治 CDQ (SHY)显然是一个人的名字,陈丹琪(MM)(NOI2008金牌女选手). 从归并开始(这里并没有从逆序对开始,是想直接引入分治思想,而不是引入处理对象) 一个很简单的 ...

  9. 入门react

    前言:今天翻到了好久之前学习react时的笔记,拿出来记录一下以免忘掉,里面主要是记录了安装环境,创建项目,启动项目,jsx,组件介绍,组件通信,多层嵌套,路由搭建,路由传参,redux.记录的比较浅 ...

  10. linux 设置固定ip和dns

    目录 1. centos 1.1 ifconfig 查看网卡名称 1.2 设置固定ip和dns 1.3 重启网络 2. ubuntu 2.1 ifconfig 查看网卡名称 2.2 设置固定ip和dn ...