【问题标题】:Why does array indexing begin at 0 rather than at 1 in languages such as Java and C? [closed]为什么数组索引在 Java 和 C 等语言中从 0 开始而不是从 1 开始? [关闭]
【发布时间】:2014-03-22 03:40:10
【问题描述】:

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

【问题讨论】:

  • 在coldfusion中它们从一开始,在javascript中它们从零开始(并且在您的代码中(无论您使用什么)似乎从零开始)。这一切都取决于创作者的喜好。 :)
  • 这是一个毫无意义的问题。根据您使用的语言,数组索引从 1 或 0 开始,在某些语言中它是可调整的
  • @Antlersoft 这不是没有意义的。这是一个非常好的问题。 :)
  • 这对于 SO 来说是相当离题的。它可能更适合programmers.stackexchange.comit has already been answered there

标签: arrays data-structures indexing performance


【解决方案1】:

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

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

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

请注意,并非所有语言都如此,但由于在大多数实现中索引符号和地址添加之间的联系,零索引方法非常普遍。

【讨论】:

    【解决方案2】:

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

    元素--> 内存位置

    一个 --> 1000

    b --> 1002

    c --> 1004

    d --> 1006

    e --> 1008

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

    arr[0] 表示 arr+2*0=1000(2 表示数据类型的大小,本例为 int,int 大小为 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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-16
      • 2023-03-30
      • 1970-01-01
      • 2020-09-18
      • 1970-01-01
      • 2023-03-22
      • 2010-10-11
      相关资源
      最近更新 更多