是否有其他常见的“c-like”或非“c-like”语言具有非零索引数组位置?
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访问第一项,而不是零。
28个解决方案
59 votes
列表可以在维基百科上找到。
ALGOL 68
APL
AWK
CFML
COBOL
Fortran
FoxPro
Julia
Lua
Mathematica
MATLAB
PL/I
RPG
Sass
Smalltalk
Wolfram Language
XPath/XQuery
LJM answered 2019-05-16T00:08:39Z
18 votes
Fortran从1开始。我知道因为我的爸爸在我出生之前曾经为Fortran编程(我现在33岁)并且他真的批评现代编程语言从0开始,说它不自然,不是人类的想法,不像数学,和 等等。
但是,我发现从0开始的事情非常自然; 我的第一个真正的编程语言是C和*(ptr + n)如果n没有从零开始就不会那么好用!
Adrian Smith answered 2019-05-16T00:09:11Z
13 votes
在“数组系统交叉引用列表”表(默认基本索引列)下的“编程语言比较”(数组)下,维基百科上有一个非常大的语言列表
这对一般的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中的序列同时存在 正整数的函数。 可怜! (备注完。)
DVK answered 2019-05-16T00:10:13Z
11 votes
Fortran,Matlab,Pascal,Algol,Smalltalk等等。
High Performance Mark answered 2019-05-16T00:10:37Z
11 votes
同样在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
Schedler answered 2019-05-16T00:11:09Z
10 votes
你可以在Perl中完成
$[ = 1; # set the base array index to 1
如果您愿意,也可以从42开始。 这也会影响字符串索引。
实际上非常不鼓励使用此功能。
Thilo answered 2019-05-16T00:11:51Z
7 votes
Erlang的元组和列表索引从1开始。
Greg Hewgill answered 2019-05-16T00:12:15Z
6 votes
JDBC(不是语言,而是API)
String x = resultSet.getString(1); // the first column
Thilo answered 2019-05-16T00:12:40Z
4 votes
Lua - 令人失望
matja answered 2019-05-16T00:13:05Z
4 votes
找到一个 - Lua(编程语言)
检查阵列部分说 -
“Lua数组是基于1的:第一个索引是1而不是0,因为它适用于许多其他编程语言(尽管允许显式索引为0)”
Sachin Shanbhag answered 2019-05-16T00:13:42Z
4 votes
VB Classic,至少通过
Option Base 1
Dario answered 2019-05-16T00:14:08Z
4 votes
Delphi中的字符串从1开始。
(静态数组必须明确指定下限。动态数组始终从0开始。)
gabr answered 2019-05-16T00:14:40Z
3 votes
ColdFusion - 尽管它是引擎盖下的Java
andrewWinn answered 2019-05-16T00:15:04Z
3 votes
阿达和帕斯卡尔。
Dave answered 2019-05-16T00:15:28Z
3 votes
PL/ SQL。 这样做的结果是当使用从0开始并与Oracle交互的语言时,您需要自己处理0-1转换,以便通过索引进行数组访问。 实际上,如果您使用foreach之类的构造而不是按行或按名称访问列,那么这不是什么大问题,但您可能需要最左边的列,例如,第1列。
Gaius answered 2019-05-16T00:15:54Z
3 votes
索引从CFML中的一个开始。
davidcl answered 2019-05-16T00:16:19Z
3 votes
整个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主导霸权之外的许多语言至今仍然如此。
JUST MY correct OPINION answered 2019-05-16T00:17:06Z
2 votes
还有Smalltalk
Dawie Strauss answered 2019-05-16T00:17:32Z
2 votes
Visual FoxPro,FoxPro和Clipper都使用数组,其中元素1是数组的第一个元素......我假设这是1索引的意思。
PilotBob answered 2019-05-16T00:17:57Z
2 votes
我看到这里的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的主要优势之一是阵列处理能力,很明显这里没有提到很多其他的输入和输出。
Rook answered 2019-05-16T00:19:36Z
2 votes
没人提到XPath。
Grzegorz Oledzki answered 2019-05-16T00:20:00Z
2 votes
Mathematica和Maxima,除了已经提到的其他语言。
Lorenzo Stella answered 2019-05-16T00:20:26Z
2 votes
informix,除了已经提到的其他语言。
Javi Moya answered 2019-05-16T00:20:51Z
2 votes
基本 - 不仅仅是VB,而是所有旧的20世纪80年代的行编号版本。
理查德
winwaed answered 2019-05-16T00:21:23Z
1 votes
FoxPro使用从索引1开始的数组。
Robert Cartaino answered 2019-05-16T00:21:48Z
1 votes
dBASE使用从索引1开始的数组。
dBASE中的数组(起始)
Robert Cartaino answered 2019-05-16T00:22:20Z
1 votes
RPG,包括现代RPGLE
Internet man answered 2019-05-16T00:22:44Z
-1 votes
虽然C是按设计0索引的,但是可以安排C中的数组被访问,就好像它是索引的1(或任何其他值)一样。 不是你期望普通的C编码器经常做的事情,但它有时会有所帮助。
例:
#include
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;
}
MAK answered 2019-05-16T00:23:13Z