Java和C\C++中数组的区别

Java中的数组

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

一维数组 :

int[] arr = new int[4];

内存解析 :

二维数组 :

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

内存解析 :

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

C\C++中的数组

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

一维数组 :

int arr[4];

二维数组 :

int arr[3][2];

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

举例证明 :

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

#include <iostream>
​
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中的二维数组不是完全连续存储的。

两者主要区别

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

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

C\C++ :

java :

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

侯静川

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值