面试官问我:数组下标为什么要从0开始?为什么不是从1开始?

8 篇文章 0 订阅
6 篇文章 0 订阅

说实话,这个问题我原来真的没有思考过呢!通过学习,我发现它是跟操作系统的内存寻址相关的!

==先上一个简单的数组内存结构图:== int[] array = {1,2,3,4}; 内存地址是由寻址公式计算而来,操作系统的寻址公式其实就是通过下标找到对应的内存地址。

假如数组首地址是1000,由于int类型在内存中是占4个字节,则

array[0] = 1000 + 0 * 4
array[1] = 1000 + 1 * 4
array[2] = 1000 + 2 * 4
array[3] = 1000 + 3 * 4

下标从0开始:addr = 1000 + index * 4

array[1] = 1000 + (1 - 1) * 4
array[2] = 1000 + (2 - 1) * 4
array[3] = 1000 + (3 - 1)* 4
array[4] = 1000 + (4 - 1)* 4

下标从1开始:addr = 1000 +( index - 1) * 4

可以发现下标从1开始时,寻址公式多了一步减法运算!!!
当项目的数据规模较小时,可以不会有太大的变化。然而,当数据规模较大时,会严重影响到内存的检索效率。

总结:
为了极致的检索效率!

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值