C语言和java语言数组的区别

    选择打赏方式

C语言和java语言前面大部分的内容基本都是一样的,所以我在学习java的时候基本都是开两倍速看的,也基本上能够看懂,不过到了数组这一块C语言和java语言就有比较大的差别了

C语言和java数组的区别

C数组

一维数组:

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

  • 初始化:

  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数组

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

一维数组:

  • 动态初始化:和C语言的动态初始化含义不相同,C语言是用malloc而java不是

只指定数组的长度,具体数据不指定,数据类型[] 数组名 = new 数据类型[数组长度];int sy[] = new int[10];

  • 静态初始化:

定义数组时,直接指定各个元素的值,由元素的个数决定数组的长度, 数据类型[] 数组名 = new 数据类型[]{1,2,3,4};
int[ ] a = {1,2,3,4,5};

注意:在Java程序中声明数组时,无论用何种方式声明数组,都不能指定其长度。如以“int>声明数组时,无论用何种方式声明数组,都不能指定其长度。如以“int a[5];”方式定义数组将是非法的,该语句在编译时将出错。

二维数组:

特点是在堆内存中,各个二维数组的元素是连续的,但各个一维数组之间不是连续存放的。

  • 动态初始化:

数据类型 [ ][ ] 数组名 = new 数据类型[行数][列数];int [ ][ ] a = new int [3][4];还可以这样写把括号放在变量名后面,和C语言同一形式

虽然在应用上很像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;".以此类推.

使用多维数组时,输入、输出的方式和一、二维数组相同,但是每多一维,嵌套循环的层数就必须多一层,所以维数越高的数组其复杂度也就越高。

版权声明:若无特殊注明,本文为《若离风》原创,转载请保留文章出处。
本文链接:https://www.rlfit.cn/post-39.html
正文到此结束

热门推荐

发表吐槽

你肿么看?

你还可以输入 250 / 250 个字

嘻嘻 大笑 可怜 吃惊 害羞 调皮 鄙视 示爱 大哭 开心 偷笑 嘘 奸笑 委屈 抱抱 愤怒 思考 日了狗 胜利 不高兴 阴险 乖 酷 滑稽

评论信息框
可使用QQ号实时获取昵称+头像

私密评论

吃奶的力气提交吐槽中...


既然没有吐槽,那就赶紧抢沙发吧!