为什么在Java和C等语言中,数组索引从0开始而不是1开始?

时间:2014-03-22 03:40:11

标签: arrays data-structures indexing performance

为什么不从1开始索引数组?为什么数组索引从0开始?

2 个答案:

答案 0 :(得分:2)

基本上是因为数组实际构建在内存中的方式。 您的变量指向数组的开头和"索引"实际上是一个偏移量,它是地址算术的语法糖。

所以基本上你有第一个内存位置,你移动n个元素来获取你正在寻找的元素。

更多信息: http://see.stanford.edu/materials/icsppcs107/07-Arrays-The-Full-Story.pdf

请注意,并非所有语言的情况都是如此,但由于索引表示法与大多数实现中的地址添加之间的联系,零索引方法非常常见。

答案 1 :(得分:0)

实际上,数组var是指向基址的指针。假设int arr [5]是在内存{a,b,c,d,e}中分配的数组

元素 - > MemoryLocation

a - > 1000

b - > 1002

c - > 1004

d - > 1006

e - > 1008

这里arr充当指针并保存地址1000

arr [0]表示arr + 2 * 0 = 1000(2表示数据类型的大小,在本例中为int,int size为2B)

arr [1]表示arr + 2 * 1 = 1000 + 2 = 1002

arr [2]表示arr + 2 * 2 = 1000 + 2 = 1004

arr [3]表示arr + 2 * 3 = 1000 + 2 = 1006

arr [4]表示arr + 2 * 4 = 1000 + 2 = 1008

因为这个数组索引从零开始。