栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Java和CC++中数组的区别

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java和CC++中数组的区别

Java中的数组

java中的数组是引用数据类型,在方法内声明定义的数组会在栈空间中存放该数组的引用,其数组将开辟在堆空间中。也就是说在栈空间中存放的是该数组的首地址,而真正的数组存放在堆空间中,通过这个首地址来去调用数组的各个元素。

一维数组 :

int[] arr = new int[4];

内存解析 :

二维数组 :

int[][] arr = new int[3][2];

内存解析 :

可见,java中的二维数组实际上就是一个一维数组中的各个元素也是一维数组,每一个元素都对应一个一维数组实体。

CC++中的数组

在C语言和C++中,通常在函数内定义的数组空间都是开辟在栈空间的,将栈中一段连续的空间分配给数组,数组的名字是这块空间的首地址。由于数组在栈中申请一块连续的空间,这块空间的大小必须提前确定,所以数组不能动态分配内存空间。( 若需动态分配内存则要使用C语言中的malloc函数或者C++中的new运算符将其开辟在堆空间中 )

一维数组 :

int arr[4];

二维数组 :

int arr[3][2];

实际上,C语言中二维数组申请内存空间的时候是在栈中线性开辟内存的,为顺序存储。虽然是二维数组,编译器在申请内存空间的时候,也是线性分配的内存空间。所以二维数组可以当做一维数组看待。

举例证明 :

定义一个数组,将其看做三行两列 :

#include 
​
using namespace std;
​
int main()
{
    int arr[3][2] = {{1, 2},
                     {3, 4},
                     {5, 6}};
    
    cout << "arr[1][1] = " << arr[1][1] << endl;
    cout << "arr[0][3] = " << arr[0][3] << endl;
​
    return 0;
}

运行结果 :

arr[1][1] = 4
arr[0][3] = 4

由于arr[1] [0] 对应的是第四个元素,arr[0] [3] 对应的也是第四个元素,所以输出的元素是相同的,证明了二维数组是连续存储的结论。

而在java中,此写法会报数组角标越界的异常,另一方面证明了java中的二维数组不是完全连续存储的。

两者主要区别
  • CC++中的数组若在函数体内声明且不使用malloc函数或者new关键字,其内存是在栈空间中开辟的。而java中的数组为引用数据类型,在方法内声明时是在堆空间中开辟内存。

  • CC++中的多维数组是顺序存储线性结构的,而java中的多维数组则是树形结构。

CC++ :

java :

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1000832.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号