Arrays 是否还有其他常见的问题;“类c”;或非「;“类c”;具有非零索引数组位置的语言?

Arrays 是否还有其他常见的问题;“类c”;或非「;“类c”;具有非零索引数组位置的语言?,arrays,programming-languages,indexing,Arrays,Programming Languages,Indexing,C编程语言被称为零索引数组语言。可以使用0访问数组中的第一项。例如double-arr[2]={1.5,2.5}数组arr中的第一项位于位置0arr[0]==1.51基于索引的编程语言是什么 我听说这些语言从1开始而不是从0开始进行数组访问:Algol、Matlab、Action!,Pascal、Fortran、Cobol。完成了吗 具体地说,基于1的数组将使用1而不是零来访问第一项。Lua-令人失望的是,还有SmalltalkColdFusion-即使它是引擎盖下的Java也可以在上找到列表

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而不是零来访问第一项。

Lua-令人失望的是,还有Smalltalk

ColdFusion-即使它是引擎盖下的Java也可以在上找到列表


Wikipedia上“Array system cross reference list”表(默认的基本索引列)下有一个相当大的语言列表

对1-vs.0-indexed和订阅进行了很好的讨论

引自博客:

E.W.Dijkstra的EWD831,1982年

当处理长度为N的序列时,其中的元素 若要通过下标进行区分,则 下一个令人烦恼的问题是下标是什么 要分配给其起始位置的值 元素。遵守公约(a) 从下标开始时的收益率 1,下标范围为1≤ i 备注:许多编程语言的设计都没有经过应有的考虑 注意这个细节。用FORTRAN语言 下标总是从1开始;阿尔戈语 60,在帕斯卡语中,公约c)已生效 已通过;最近的SASL 回到FORTRAN约定: SASL中的一个序列同时是 正整数上的函数。 可怜!(备注结束。)


Ada和Pascal。

Visual FoxPro、FoxPro和Clipper都使用数组,其中元素1是数组的第一个元素。。。我假设这就是你所说的1-索引。

FoxPro使用从索引1开始的数组。

dBASE使用从索引1开始的数组


我看到这里的fortran知识仍然在'66版本上

Fortran具有数组的上下限变量

也就是说,如果您声明一个数组,如:

real, dimension (90) :: x
那么1将是下限(默认情况下)

如果你这样声明的话

real, dimension(0,89) :: x
real, allocatable :: x(:,:)
但是,它的下限为0

另一方面,如果你声明

real, dimension(0,89) :: x
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的主要优势之一是数组处理能力,很明显这里没有提到很多其他的输入和输出。

虽然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;
}
#包括
int main(){
基于整数零的[10];
int*1_为基础;
int i;
一个基于=零个基于-1;
对于(i=1;i=1;i--)printf(“基于一个单元的[%d]=%d\n”,i,基于一个单元的[i]);
返回0;
}

没有人提到XPath。

包括现代RPGLE在内的RPG找到了一个-

检查数组部分,其中显示-


“Lua数组是基于1的:第一个索引是1,而不是像许多其他编程语言那样的0(尽管允许显式索引为0)”

VB Classic,至少通过

Option Base 1

Fortran、Matlab、Pascal、Algol、Smalltalk和许多其他语言。

Fortran从1开始。我知道这一点,因为我父亲在我出生之前(我现在33岁)就编写Fortran,他真的批评现代编程语言从0开始,说这是不自然的,不是人类的思维方式,不像数学,等等

然而,我发现从0开始的事情很自然;我的第一个真正的编程语言是C语言,如果n不是从零开始的,那么*(ptr+n)就不会工作得这么好

JDBC(不是一种语言,而是一种API)

您可以用Perl来完成

$[ = 1;  # set the base array index to 1
如果你愿意,你也可以从42开始。这也会影响字符串索引

实际上不鼓励使用此功能。

Erlang和索引从1开始。

字符串从1开始


(静态数组必须明确指定下限。动态数组始终从0开始。)

。这样做的结果是,当使用从0开始的语言并与Oracle交互时,您需要自己处理0-1转换,以便通过索引访问阵列。实际上,如果在行或按名称访问列上使用类似于
foreach
的构造,这不是什么大问题,但您可能需要最左边的列,例如第1列。

Mathematica和Maxima,以及前面提到的其他语言。

在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

索引从CFML中的一个开始。

informix,除了前面提到的其他语言。

整个Wirthian语言系列,包括Pascal、Object Pascal、Modula-2、Modula-3、Oberon、Oberon-2和Ada(加上我可能忽略的其他一些语言)都允许数组是索引的