为什么很多语言的数组下标是从0开始而不是1?

    今天有同事问我说,为什么java数组的下标是从0开始呢?这让我想起来从小白开始学习java的时候,在学习数组和集合的时候,老师说一定要记住啊,他们的下标要从0开始。随着写的代码多了,这也就成了想当然,感觉就应该从0开始,哈哈。
    首先我们先看个问题,假如有这么一串连续的自然数 1 2 3 4 5 6 7 8 9 10 ,让我们用数学不等式表示出来,那么显然我们可以这样表示:

a.  1<=i<11
b.  0<i <=10
c.  1<=i<=10
d.  0<i<11

    那在a、b、c、d中应该选择哪一个呢?是不是不好选,哈哈。但我们观察这四个不等式可以观察到,其中a和b有个突出的有点,就是不等式的边界之差正好等于这串连续整数的个数(长度),所以我们有理由首先选择a和b。
    那么a和b之间,谁又是最优的呢?
    我们可以看到,对于a,不等式的下边界等于这个连续的自然数的最小值,对于b,不等式的右边界等于这个连续的自然数的最大值。好的,那我们下面如果把这个连续的自然数 改为 0 1 2 3 4 5 6 7 8 9的时候,那么:

a 不等式就变成了 0<=i<10
b 不等式就变成了 -1<i<=9

    这时按照b这个不等式,下边界变成了-1,是个负数,不是自然数,显然a这个不等式更加的优雅,因为自然数的下边界还是自然数。

    好,那么我们下面就看下为什么下标也使用0开始。
按照等式a的规则:

当下标从1开始的时候,下标的范围1<=i<n+1;
当下标从0开始的时候,下标的范围0<=i<n;

    从上面这两个分析我们看到,以0为开始的时候,元素的下标就等于数组中它前面的元素的个数(长度)。
哈哈,其实大师Dijkstra 早就给出了一个合理的解释了,想详细了解的,可以去参考大师的文稿:
https://www.cs.utexas.edu/users/EWD/transcriptions/EWD08xx/EWD831.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值