C编程语言被称为零索引数组语言。可以使用0
访问数组中的第一项。例如double arr[2] = {1.5,2.5}
数组arr
中的第一项位于位置0. arr[0] === 1.5
哪些编程语言是基于1的索引?
我听说这些语言从1开始而不是0开始用于数组访问:Algol,Matlab,Action !, Pascal,Fortran,Cobol。这完成了吗?
具体而言,基于1的数组将使用1访问第一个项目,而不是零。
答案 0 :(得分:61)
列表可以在wikipedia找到。
ALGOL 68
APL
AWK
CFML
COBOL
Fortran
FoxPro
Julia
Lua
Mathematica
MATLAB
PL/I
RPG
Sass
Smalltalk
Wolfram Language
XPath/XQuery
答案 1 :(得分:18)
然而,我发现从0开始的事情很自然;我的第一个真正的编程语言是C和*(ptr + n)如果n没有从0开始就不会那么好用!
答案 2 :(得分:14)
一个非常大的语言列表位于维基百科下的Comparison of Programming Languages (array)下的“阵列系统交叉引用列表”表(默认基本索引列)
This对1-对0索引和订阅进行了很好的讨论
引用博客:
E.W. Dijkstra的EWD831,1982。
当处理长度为N的序列时,我们的元素 希望通过下标来区分 下一个令人烦恼的问题是什么下标 分配给它的起始值 元件。遵守惯例a) 收益率,以下标开头 1,下标范围1≤i<1。 N + 1; 然而,从0开始,给出了 更好的范围0≤i<0。 N.让我们放手吧 我们的序数从零开始: 元素的序数(下标)等于 前面的元素数量 序列。和道德的 故事是我们更好的考虑 - 在所有这些世纪之后! - 零作为 最自然的数字。
备注::许多编程语言都是在没有应有的情况下设计的 注意这个细节。在FORTRAN 下标总是从1开始;在ALGOL 60和PASCAL,公约c) 被采纳;最新的SASL 落后于FORTRAN大会: SASL中的序列同时存在 正整数的函数。 可怜! (备注完。)
答案 3 :(得分:11)
你可以在Perl
中完成$[ = 1; # set the base array index to 1
如果您愿意,也可以从42开头。这也会影响字符串索引。
实际上非常不鼓励使用此功能。
答案 4 :(得分:11)
Fortran,Matlab,Pascal,Algol,Smalltalk以及许多其他人。
答案 5 :(得分:11)
同样在Ada中,您可以根据需要定义数组索引:
A : array(-5..5) of Integer; -- defines an array with 11 elements
B : array(-1..1, -1..1) of Float; -- defines a 3x3 matrix
有人可能会争辩说,用户定义的数组索引范围会导致维护问题。但是,以不依赖于数组索引的方式编写Ada代码是正常的。为此,该语言提供了元素属性,这些属性是为所有已定义的类型自动定义的:
A'first -- this has the value -5
A'last -- this has the value +5
A'range -- returns the range -5..+5 which can be used e.g. in for loops
答案 6 :(得分:7)
答案 7 :(得分:6)
JDBC(不是语言,而是API)
String x = resultSet.getString(1); // the first column
答案 8 :(得分:5)
Lua - 令人失望
答案 9 :(得分:4)
Delphi中的字符串从1开始。
(静态数组必须明确指定下限。动态数组总是从0开始。)
答案 10 :(得分:4)
答案 11 :(得分:4)
VB Classic,至少通过
Option Base 1
答案 12 :(得分:3)
索引从CFML中的一个开始。
答案 13 :(得分:3)
PL/SQL。这样做的结果是当使用从0开始并与Oracle交互的语言时,您需要自己处理0-1转换,以便通过索引进行数组访问。实际上,如果您使用foreach
之类的结构来覆盖行或按名称访问列,那么这不是什么大问题,但您可能需要最左边的列,例如,第1列。
答案 14 :(得分:3)
整个Wirthian语言系列包括Pascal,Object Pascal,Modula-2,Modula-3,Oberon,Oberon-2和Ada(加上我可能忽略的一些其他语言)允许从任何一点开始索引数组喜欢包括,显然,1。
Erlang从1开始索引元组和数组。
我认为 - 但不再是正面的 - Algol和PL / 1都是从1开始的。我也很确定Cobol从1开始编号。
基本上,大多数高级编程语言在C之前从1开始索引(汇编语言是一个值得注意的例外,显而易见的原因 - 以及C索引为0的原因)以及来自C主导霸权之外的许多语言仍然这样做一天。
答案 15 :(得分:3)
Ada和Pascal。
答案 16 :(得分:3)
ColdFusion - 即使它是引擎盖下的Java
答案 17 :(得分:2)
Mathematica和Maxima,除了已经提到的其他语言。
答案 18 :(得分:2)
informix,除了已经提到的其他语言。
答案 19 :(得分:2)
基础 - 不仅仅是VB,而是所有旧的20世纪80年代的行编号版本。
理查德
答案 20 :(得分:2)
没人提到XPath。
答案 21 :(得分:2)
我发现 fortran 的知识仍然在'66版本上。
Fortran可以改变数组的下限和上限。
意思是,如果你声明一个类似的数组:
real, dimension (90) :: x
然后1将是下限(默认情况下)。
如果你声明它
real, dimension(0,89) :: x
然而,,它的下限为0。
如果另一方面你声明它像
real, allocatable :: x(:,:)
然后你可以将它分配给你喜欢的任何东西。例如
allocate(x(0:np,0:np))
表示数组将包含元素
x(0, 0), x(0, 1), x(0, 2 .... np)
x(1, 0), x(1, 1), ...
.
.
.
x(np, 0) ...
还有一些更有趣的组合:
real, dimension(:, :, 0:) :: d
real, dimension(9, 0:99, -99:99) :: iii
留给感兴趣的读者做作业:)
这些只是我记忆中的那些。由于fortran的主要优势之一是阵列处理能力,很明显这里没有提到很多其他的输出。
答案 22 :(得分:2)
Visual FoxPro,FoxPro和Clipper都使用数组,其中元素1是数组的第一个元素......我假设你的意思是1索引。
答案 23 :(得分:2)
还有Smalltalk
答案 24 :(得分:1)
RPG,包括现代RPGLE
答案 25 :(得分:1)
dBASE 使用从索引1开始的数组。
答案 26 :(得分:1)
FoxPro 使用从索引1开始的数组。
答案 27 :(得分:-1)
虽然C是按设计0索引的,但是可以安排C中的数组被访问,就好像它是1(或任何其他值)索引一样。不是你期望普通的C编码器经常做的事情,但它有时会有所帮助。
示例:
#include <stdio.h>
int main(){
int zero_based[10];
int* one_based;
int i;
one_based=zero_based-1;
for (i=1;i<=10;i++) one_based[i]=i;
for(i=10;i>=1;i--) printf("one_based[%d] = %d\n", i, one_based[i]);
return 0;
}