<分区>
有什么特别的原因吗?我知道语言就是这样写的,但我们不能改变它吗? 如果索引从 1 开始,我们将面临哪些挑战?
标签 java c++ python c coding-style
<分区>
有什么特别的原因吗?我知道语言就是这样写的,但我们不能改变它吗? 如果索引从 1 开始,我们将面临哪些挑战?
最佳答案
出于历史原因,以及与数组在内存中“制作”的方式相关的原因。
在 C 中,数组是一 block 内存(在编译器级别有一些关于其大小的信息)。您有一个指向其第一个元素的指针(引用)。要转到它的第二个元素,你可以这样做
int array[10]; // your array
int *p = array; // reference to first element of array
int *q = p + 1; // reference to second element of array
int *r = p + 2; // reference to third element of array
显然,为了对称:
array[0] // reference to first element of array
array[1] // reference to second element of array
array[2] // reference to third element of array
C 的[x]
运算符实际上被编译为array + x
。
你看到了吗?数组在 C 中是“以 0 为基数”。由于这个原因,在许多其他语言中也是如此。
现在,C++ 的根源是 C,Java 的根源是 C++ 和其他语言,C# 的根源是 C++、java 和其他语言……同一棵树。
Basic 显然是另一棵树:-)
关于java - 为什么数组的索引/列表不以 1 开头?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18109671/