首页
学习
活动
专区
工具
TVP
发布
首页
学习
活动
专区
工具
TVP
社区首页 >专栏 >前端真相 >为什么数组下标是从0开始?

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

原创
作者头像
城市中的游牧民族
修改2018-10-29 09:32:03
2.7K0
修改2018-10-29 09:32:03
举报

也不是所有的高级程序语言都是如此,比如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 删除。

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

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

评论
登录后参与评论
0 条评论
热度
最新
关于作者
城市中的游牧民族
开发工程师
目录
  • 原因一:历史原因
  • 原因二:减少CPU指令运算
  • 原因三:物理内存的地址是从0开始的
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档