码迷,mamicode.com
首页 > 编程语言 > 详细

为什么大多数编程语言中的数组都从0开始

时间:2014-07-27 11:26:32      阅读:287      评论:0      收藏:0      [点我收藏+]

标签:c语言   数字下标   python   

先说说为什么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

译文可见:

http://blog.jobbole.com/58018/

为什么大多数编程语言中的数组都从0开始

标签:c语言   数字下标   python   

原文地址:http://blog.csdn.net/jiangxinnju/article/details/38153497

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!