为什么大多数编程语言中的数组都从0開始
2017-05-04 09:26
169 查看
先说说为什么C语言的数组是从0開始:众所周知,C语言的数组是直接操作内存,那我们肯定得从内存的寻址開始说起,以“以行为主序”的分配为例:设数组的基址为LOC(a c1 c2),每一个数组元素占领l 个地址单元,那么aij 的物理地址可用一线性寻址函数计算:
LOC(aij)=LOC(a c1 c2)+( (i- c1) *( d2 - c2 + 1)+ (j- c2) )*l
推广到一般的三维数组:A[c1..d1] [c2..d2][c3..d3],则aijk 的物理地址为:
LOC(i,j,k)=LOC(a c1 c2 c3)+( (i- c1) *( d2 - c2 + 1)* (d3- c3 + 1)+(j- c2) *( d3- c3 + 1)+(k- c3))*l
显然,此处的c1 c2 c3 为0 会大大简化计算,越是多维数组效果越明显。这对于计算机寻址计算来说显然优点是大大的啊,这就是为什么最早C语言的数组起始都是0,至于什么其它的原因认为美啊什么的都是后来人们YY的。
其实。在如今非常多时候计算不再是瓶颈的时候。数组的下标也有从1開始的,比方matlab。难道matlab就不美了么?
因为C语言发明较早。影响有非常大,所以非常多后来的编程语言都借鉴了C语言的特征。保持了数组下标从0開始。比方C++和Java等,当然一些语言的愿意有所不同。比方Python。
为什么Python语言的下标也是从0開始,你能够看一下Python之父Guido van Rossum的说明:
https://plus.google.com/115212051037621986145/posts/YTUxbXYZyfi
译文可见:
相关文章推荐
- 为什么大多数编程语言中的数组都从0开始
- 为什么大多数编程语言中的数组都从0开始
- 为什么有些编程语言的数组要从零开始算
- 编程语言十万个为什么之java web的基础概念
- 【编程习惯】对运行时异常(RuntimeError)代码的定位。针对C,C++以及大多数无虚拟机编程语言。
- 为什么编程语言以及数据库要从1970年1月1日开始计算时
- 解析哈希表中数组的容量为什么是质数
- 为什么编程语言以及数据库要从1970年1月1日开始计算时
- Java为什么不支持泛型类型的数组
- 为什么要声明静态(static)数组
- 大多数人为什么不成功?
- 星座为什么会有准度且大多数人会符合自己的星座特点
- 什么是java虚拟机,为什么java会被称为是“平台无关的编程语言”?
- C语言中,为什么没有把long转化成字符数组的函数?
- Swift编程语言学习3.1——数组
- 你不知道的c语言之为什么数组的大小不能是变量
- byte数组转float 以及byte转其他类型时为什么要&0xff
- 为什么servlet从请求得到的cookies是一个数组而不是一个cookie
- android 向JS传递数组为什么得到的不是数组呢?
- 数组保存图片地址然后输出到网页为什么只显示最后一张