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)访问第一项。
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)访问第一项。
Answers:
可以在Wikipedia上找到列表。
ALGOL 68
APL
AWK
CFML
COBOL
Fortran
FoxPro
Julia
Lua
Mathematica
MATLAB
PL/I
Ring
RPG
Sass
Smalltalk
Wolfram Language
XPath/XQuery
Fortran从1开始。我知道,因为我父亲在我出生之前曾经对Fortran进行编程(现在我33岁),他确实批评现代编程语言从0开始,说这是不自然的,不是人类的思维方式,与数学不同,并且以此类推。
但是,我发现从0开始的事情很自然。我的第一种真正的编程语言是C,如果n不能从零开始,**(ptr + n)的表现就不会那么好!
维基百科上“数组系统交叉引用列表”表(“默认基本索引”列)下“比较编程语言(数组) ”中列出了大量语言。
这有1对的订阅一般商量好了0-索引,
引用博客:
EW Dijkstra的EWD831,1982年。
当处理长度为N的序列时,我们希望通过下标区分元素,下一个令人烦恼的问题是将哪个下标值分配给其起始元素。遵守约定a)从下标1开始产生下标范围1≤i <N + 1; 但是,从0开始,给出的范围更好0≤i <N。因此,让我们使序数从零开始:元素的序数(下标)等于序列中位于其前的元素数。这个故事的寓意是,在所有这些世纪之后,我们最好将零视为最自然的数字。
备注::设计了许多编程语言,而没有对此细节给予足够的重视。在FORTRAN中,下标始终从1开始;下标始终从1开始。在ALGOL 60和PASCAL中,采用了惯例c);最近的SASL不再使用FORTRAN约定:SASL中的序列同时是正整数的函数。可怜!(备注结束。)
同样在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
JDBC(不是语言,而是API)
String x = resultSet.getString(1); // the first column
ORDER BY 1
(第一列)或SUBSTRING(name, 2)
(从第二个字符开始)
VB Classic,至少通过
Option Base 1
Dim x(10)
创建11个元素的唯一语言……
0
基于-的,数字声明了上限(有效索引范围是从0
到10
)。由于VB的For循环包含在内,因此非常适合。
我看到这里的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的主要优势之一是数组处理功能,因此很明显,这里没有提到许多其他输入输出。
没有人提到XPath。
除了已经提到的其他语言外,Mathematica和Maxima也是如此。
除了已经提到的其他语言,informix。
dBASE使用了从索引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;
}
1
从中减去的行zero_based
是未定义的行为-将指针移到数组中第一个元素之前是非法的。例如,一致的实现可能会插入将由您的代码触发的越界检查。