1.数组理论基础

笔记学习:代码随想录 (programmercarl.com)

数组

数组是存放在连续内存空间上的相同类型数据的集合。

注意:

  • 数组下标都是从0开始的。
  • 数组内存地址连续。

缺点:

(1)因为数组的在内存空间的地址是连续的,所以我们在删除或者增添元素的时候,就难免要移动其他元素的地址

(2)数组的元素是不能删的,只能覆盖(比如通过赋值语句,直接覆盖;若直接删除后再增加该值,则需要移动别的元素,十分复杂)。

那么二维数组在内存的空间地址是连续的么?

不同编程语言的内存管理是不一样的。

C++中二维数组在地址空间上是连续的。

这种连续存储的方式有助于提高内存访问的效率,因为可以通过简单的指针运算来访问数组的元素。

C、C++ 和 Fortran支持以连续方式存储二维数组。这些语言中的二维数组在内存中是以行主序(C 连续方式)或列主序(Fortran 连续方式)存储的。这种连续存储的方式可以提供更高的内存访问效率,尤其是在进行大规模的数值计算时。

Java的二维数组不连续。

Python 中的普通二维数组(列表的列表)在内存中不是连续存储的,但使用 NumPy 创建的数组可以在内存中以连续方式存储。

Python 中的二维数组是通过列表的列表(列表嵌套)来表示的,而不是使用连续的内存块。这是因为 Python 的列表是动态的,可以容纳不同长度的元素。每个内部列表都是一个独立的对象,它们在内存中可以分散存储,而不一定是连续的。

这种设计选择在某些情况下提供了更大的灵活性,但也带来了一些性能上的开销。由于二维数组的元素不是连续存储的,访问数组的特定元素可能需要更多的指针解引用操作,从而导致一些额外的开销。

为什么前面说数组内存地址连续,但是不同语言的二维数组内存地址可能不连续?

一维数组的内存地址是连续的。在内存中,一维数组的元素按照其顺序依次存储,相邻元素之间没有间隔。因此,数组中的第一个元素的内存地址是最小的,而最后一个元素的内存地址是最大的。这种连续存储的方式使得我们可以通过下标来访问数组中的元素,并且可以通过简单的地址计算来定位数组中的任意元素。

例如,假设有一个整数数组 `arr`,它包含 4 个元素 `[10, 20, 30, 40]`。如果 `arr` 的起始内存地址为 `0x1000`,那么按照连续存储的原则,`arr[0]` 的内存地址为 `0x1000``arr[1]` 的内存地址为 `0x1004``arr[2]` 的内存地址为 `0x1008``arr[3]` 的内存地址为 `0x100C`。可以看到,每个元素的内存地址相对于前一个元素的地址增加了固定的偏移量(在这个例子中是 4 个字节,因为一个整数占用 4 个字节的内存空间)。

这种连续存储的方式使得数组在内存中的访问更加高效,因为可以通过简单的地址计算来确定元素的位置。但同时也要注意,一维数组的连续存储要求所有元素的类型和大小相同,且数组的长度在创建时是固定的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值