Arrays 是否还有其他常见的问题;“类c”;或非「;“类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也可以在上找到列表
0
访问数组中的第一项。例如double-arr[2]={1.5,2.5}
数组arr
中的第一项位于位置0arr[0]==1.5
1基于索引的编程语言是什么
我听说这些语言从1开始而不是从0开始进行数组访问:Algol、Matlab、Action!,Pascal、Fortran、Cobol。完成了吗
具体地说,基于1的数组将使用1而不是零来访问第一项。Lua-令人失望的是,还有SmalltalkColdFusion-即使它是引擎盖下的Java也可以在上找到列表
Wikipedia上“Array system cross reference list”表(默认的基本索引列)下有一个相当大的语言列表 对1-vs.0-indexed和订阅进行了很好的讨论 引自博客: E.W.Dijkstra的EWD831,1982年 当处理长度为N的序列时,其中的元素 若要通过下标进行区分,则 下一个令人烦恼的问题是下标是什么 要分配给其起始位置的值 元素。遵守公约(a) 从下标开始时的收益率 1,下标范围为1≤ i
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(加上我可能忽略的其他一些语言)都允许数组是索引的