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. H5 + WebGL 实现的地铁站 3D 可视化系统

    前言 工业互联网,物联网,可视化等名词在我们现在信息化的大背景下已经是耳熟能详,日常生活的交通,出行,吃穿等可能都可以用信息化的方式来为我们表达,在传统的可视化监控领域,一般都是基于 Web SCAD ...

  2. 【XSY2985】【BZOJ1367】【Baltic2004】sequence

    考虑两种情况: 1.\(a_1\)<\(a_2\)<\(a_3\)<\(a_4\)...<\(a_n\) 直接令\(b_i\)=\(a_i\),最小. 2.\(a_1\)> ...

  3. Unity4-用户输入

    Input是一个类,可以接收用户的输入 使用AddComponentMenu("Demo1/InputTest1"),将脚本加入到工程中. //例子: void Update() ...

  4. MAC配置JAVA环境变量

    一.下载安装文件 地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html jdk-8u144-macosx-x64. ...

  5. 差异:后缀数组(wzz模板理解),单调栈

    因为涉及到对模板的理解,所以就着代码看会好一些. 让那些坚决不颓代码的人受委屈了. 我是对着wzz的板子默写的,可能不完全一样啊. 还有代码注释里都是我个人的理解,不保证正确,但欢迎指正. 可以有选择 ...

  6. 工具类 ,无需再存localstorage

    /** * 工具类 */var Utils = { /** * 获得查询参数 */ getQueryString: function(name) { var search = location.sea ...

  7. python——int()、hex()、oct()、bin()、float()数值类型转换函数

    摘要:在python中,数值类型转换函数常用的有浮点型float().取整int().八进制oct().二进制bin().十六进制hex()这五个函数. 单词float的意思就是浮动的意思: int是 ...

  8. VS反编译查看源码时,会把类实现的所有接口都直接显示

    今天在看ArrayList,发现一个很有意思的问题.从VS里反编译看,ArrayList继承了ICollection. IEnumerable.IList和ICloneable,而IList又继承了I ...

  9. 关于GDAL读写Shp乱码的问题总结

    目录 1. 正文 1.1. shp文件本身的编码的问题 1.2. 设置读取的编码方式 1.2.1. GDAL设置 1.2.2. 解码方式 1.2.3. 其他 2. 参考 1. 正文 最近在使用GDAL ...

  10. Mac上sonar插件的安装及使用

    本文主要讲解sonar的安装及使用. 分为两个维度来讲解 1. 使用sonarqube以及自带的Derby数据库 2. 使用sonarqube以及配置mysql数据库 ---------------- ...