学习
实践
活动
工具
TVP
写文章
专栏首页前端真相为什么数组下标是从0开始?
原创

为什么数组下标是从0开始?

也不是所有的高级程序语言都是如此,比如Python数组下标就支持负数。

原因一:历史原因

语言出现顺序从早到晚C、Java、JavaScript。

C语言数组下标是从0开始->Java也是->JavaScript也是。

降低额外的学习和理解成本。

原因二:减少CPU指令运算

(1)下标从0开始:

数组寻址——arr[i] = base_address + i * type_size(1)

其中base_address为数组arr首地址,arr0就是偏移量为0的数组,即数组arr首地址;i为偏移量,type_size为数组类型字节数,比如int为32位,即4个字节。

(2)下标从1开始:

数组寻址——arr[i] = base_address + (i -1)* type_size(2)

比较两个计算公式可以发现公式(2)每次CPU寻址需要多一次 i-1的操作,即多了一次减法的指令运算。

对于数组这种基础数据结构,无论在哪种高级程序语言中,都是频繁间接(作为容器的基础数据结构,比如Java的ArrayList)或者直接被使用的,因此要尽量减少其消耗CPU资源。

原因三:物理内存的地址是从0开始的

计算机主存是多个连续字节大小的单元组成的数组,每个字节都对应唯一的物理地址,第一个字节的地址为0。

微信公众号:技术很有趣

原创声明,本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

登录 后参与评论
0 条评论

相关文章

  • 为什么数组下标是从0开始?

    语言出现顺序从早到晚C、Java、JavaScript。 C语言数组下标是从0开始->Java也是->JavaScript也是。 降低额外的学习和理解成本。

    城市中的游牧民族
  • 为什么数组的下标从 0 开始?

    注意:想要使用随机访问,一定要满足两个条件: 1、连续的内存空间 2、相同类型的数据

    微观技术
  • 数组是如何随机访问元素?数组下标为什么从0开始,而不是1?

    数组(Array)是一种线性表数据结构,它用一组连续的内存空间,来存储相同类型的数据。

    搜云库技术团队
  • 数组 为什么数据可以随机访问?为什么数组下标都是从0开始?

    数组是一种线性表数据的结构,他用一组连续的内存空间,来存储一组相同数据类型的数据。

    名字是乱打的
  • 为什么编程语言中数组的下标总是从0开始?

    昨天看到一个有意思的问题,为什么在我们遇到的大多数编程语言里面,数组的下标基本都是从0开始?

    我是攻城师
  • 【深度揭秘】为什么很多语言的数组下标是从0开始的?

    首先,恭喜你,能够点进来看的,已经领先60%的开发者了。 因为很多人看到标题可能觉得数组从0开始这不本来就这样吗?有什么看头,索性看都不会看,但是你点进来了,说...

    吴延宝
  • 为什么数组都是从0开始编号

    为什么数组都是从 0 开始编号,首先先了解一下数组的概念。 数组 Array 是一种线性表数据结构,是一组连续的内存空间,用来存储一组具有相同类型的数据。数组...

    s_在路上
  • 为何数组索引从0开始?

    一些编程语言的索引从1开始。比如在Fortran中,声明数组integer :: array(5)会创建一个包含5个元素的数组。要访问第一个位置的元素,则索引为...

    fem178
  • 从0开始学Golang之数组使用

    如果两个数组类型相同(包括数组的长度,数组中元素的类型)的情况下,我们可以直接通过较运算符(==和!=)来判断两个数组是否相等,只有当两个数组的所有元素都是相等...

    A梦多啦A
  • 数组:为什么很多编程语言中数组都从0开始编号?

    数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。

    Jingbin
  • 数组未必一定需从0开始,谈一下非0开始的数组

      谈到数组时,当被问及数组是从什么数开始时,估计大部分程序员都会直接说出数组当然是从0开始的。这个回答当然没有错,现在我们就来了解一下C#中的下限非...

    彭泽0902
  • C语言的数组为什么要从0开始编号

    在学习数据结构与算法之美中看到一个知识点挺有趣,虽然不是作者压倒性的实验证明,但分析起来也是有道理的,我们来看看是怎么回事:

    杨源鑫
  • 【敏捷0】敏捷项目管理-为什么从敏捷开始?为什么从PMI-ACP开始?

    作为敏捷项目管理的开篇文章,还是先来简单地说一说为什么先从敏捷开始,为什么是以 PMI-ACP 为参考。当然,这一系列的文章可能不可避免地会为 PMI-ACP ...

    硬核项目经理
  • 百亿流量系统,是如何从0开始搭建的?

    前几天,偶然看到了 《扛住100亿次请求——如何做一个“有把握”的春晚红包系统”》一文,看完以后,感慨良多,收益很多。正所谓他山之石,可以攻玉,虽然此文发表于2...

    Bug开发工程师
  • 2022-04-27:Alice 有一个下标从 0 开始的数组 arr ,由 n 个正整数组成。她会选择一个任意的 正整数 k 并按下述方式创建两个下标从 0

    2022-04-27:Alice 有一个下标从 0 开始的数组 arr ,由 n 个正整数组成。她会选择一个任意的 正整数 k 并按下述方式创建两个下标从 0 ...

    福大大架构师每日一题
  • 2022-03-06:金币路径。 给定一个数组 A(下标从 1 开始)

    给定一个数组 A(下标从 1 开始)包含 N 个整数:A1,A2,……,AN 和一个整数 B。

    福大大架构师每日一题
  • 为什么大多数编程语言中的数组都从0开始

    先说说为什么C语言的数组是从0开始:众所周知,C语言的数组是直接操作内存,那我们肯定得从内存的寻址开始说起,以“以行为主序”的分配为例:设数组的基址为LOC(a...

    用户1221057
  • 为什么很多编程语言中的数组都从0开始编号?——你真的了解数组吗?

    数组是学习数据结构的开端。尽管数组看起来非常基础、简单,但是有多少人理解数组的精髓呢?

    100000860378
  • 漫话:如何给女朋友解释为什么计算机从0开始计数,而不是从1开始?

    还有,当我们定义数组的时候,在常见的C语言、Java、Python等语言中,都是使用下标0来表示第一个元素的。

    爱敲代码的猫

扫码关注腾讯云开发者

领取腾讯云代金券