C语言like指令,是否有其他常见的“c-like”或非“c-like”语言具有非零索引数组位置?...

是否有其他常见的“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

你可能感兴趣的:(C语言like指令)