JAVA和C语言多维数组的实质是c数组连续分布,java数组到处分布。区别是java的数组其实是一个对象,因为其中不只是包含数据信息,还包括数组的长度等其他信息。
一、JAVA和C语言多维数组
实质是c数组连续分布,java数组到处分布。
区别是java的数组其实是一个对象,因为其中不只是包含数据信息,还包括数组的长度等其他信息。举个简单的例子,c语言中,int a[5],要用for循环来为每个数组元素赋值,只能for(i=0;i<5;i++) scanf(“%d”,&a[i]);而在java中,可以这样,int[] a=new int[5],for(i=0;i<a.length;i++) system.out.println(a[i])。
c语言中创建数组
int a1[N][M];
与下面这样不同
int **a2 = (int**)malloc(N*sizeof(int*));
for(int i=0;i<N;++i)
a2[i] = (int*)malloc(M*sizeof(int));
两者都为数组a分配了N*M*sizeof(int)的空间。
不同的是前者是连续的空间,后者是不连续的;
且a1是数组常量,a2是一个指向某个二维数组的指针,故a1只读,a2可以改变。
这样也就造成了c语言中直接创建的多维数组(前者)每个维度的大小不能改变。
java中创建数组
int[][] a1 = new int[N][M];
可以理解为上述c语言中的
int **a2 = (int**)malloc(N*sizeof(int*));
for(int i=0;i<N;++i)
a2[i] = (int*)malloc(M*sizeof(int));
java中的数组名即指针 也就是说两者等价。
而指针与常量不同的是 指针的值可以改呀。 (‵▽′)/想指哪就指哪。
所以可以创建一个新的一维数组
int[] b = new int[M+1];
将数组名(指针)a[N-1]指向数组b,即
a1[N-1] = b;
这就造成了java中的数组各个维度的大小可以不同啦_(:з」∠)_
当然c也可以达到改变维度大小的效果,比如
int **a = (int**)malloc(N*sizeof(int*));
for(int i=0;i<N;++i)
a[i] = (int*)malloc(M*sizeof(int));
int *b = (int*)malloc((M+1)*sizeof(int));
a[N-1] = b;
延伸阅读:
二、Java和C语言有什么区别
C++是混合型语言,java是面向对象语言。很多书中吧C++作为面向对象语言来讲,但是实际上C++不是纯种的面向对象语言。java是面向对象的代表。如果你听说过C#的话,那么C#是面向对象的终结。
当然这些对于初学者来说不太明了什么是面向对象、什么是面向过程。而我在这里解释也会让你更加懵懂。所以撇开什么是面向对象什么是面向过程,单单介绍他们实际应用区别:
C是一门非常干练的语言,一切采用函数的形式完成,你可以把所有需要的功能采用函数的形式完成,然后在主函数main中调用。学起来容易,几乎用三两天就可以学会。一般用来教学学习算法,数据结构等。同样这也造成了它的应用范围局限在小程序中,只能是针对小规模的东西开发:比如DOS程序,嵌入式开发等。
C++是在C语言的基础上扩展的,所以一般C++会兼容C语言库。C++是因为用C语言开发项目中会遇到很多团队合作问题,导致团队的工作效率下降。在此基础上迫切需要降低软件开发团队成员之间彼此的干扰性,使得每个工程人员的代码竟可能不影响他人。最后C++便应用而生了。C++主要是其中集成了类地概念,可以将所有的东西封装在类中,类中的私有成员不可被别人访问,这样就有效地解决了代码互干扰性。
java是汲取C++的长处而诞生的,这个语言采用完全面向对象的概念,将所有的功能封装在类中,而不像C++部分封装。由于java采用跨平台性,使得更容易被移植,在互联网要求多终端能够互相访问成为可能,这便形成了java平台今日的盛况,在互联网方面几乎无人可敌。
学习难易程度来讲C++非常难,即使有5年工作经验的C++工程师也未必能够熟练应用C++,C语言易掌握,但是应用起来难度不下于C++,因为C语言几乎是对硬件直接写代码,一般来说会使得代码非常庞大,增加了开发人员的工作量。java因为封装了很多功能,所以几乎开发效率相当高。
以上就是关于JAVA和C语言多维数组的实质是什么有什么区别的内容希望对大家有帮助。