Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Delphi 5.0 Pascal中的数组从0或1开始?_Arrays_Delphi_Pascal - Fatal编程技术网

Arrays Delphi 5.0 Pascal中的数组从0或1开始?

Arrays Delphi 5.0 Pascal中的数组从0或1开始?,arrays,delphi,pascal,Arrays,Delphi,Pascal,我想在Delphi5.0中做一个ArrayList。因此,我找到了一个解决方案,执行以下代码: var arr: array of String; 好的,但每次我添加内容时,我都会这样做: var Form1: TForm1; var arr : array of String; procedure TForm1.Button1Click(Sender: TObject); var aux :string; var len:integer; begin len :=

我想在Delphi5.0中做一个ArrayList。因此,我找到了一个解决方案,执行以下代码:

var arr: array of String;
好的,但每次我添加内容时,我都会这样做:

var
    Form1: TForm1;
    var arr : array of String;

procedure TForm1.Button1Click(Sender: TObject);
var aux :string;
var len:integer;
begin
    len := Length(arr) + 1;
    SetLength(arr, len);
    arr[len-1] := 'abc' + IntToStr(len);
    Button1.Caption := arr[len-1]; // just to writeout something
end;
我是C++程序员,我对Pascal一无所知。我总是听说帕斯卡指数从1开始,而不是从0开始。在上面的过程中,由于0索引开始,我执行arr[len-1]


有比Pascal数组更好的方法吗?与C++的std::vector类似?

动态数组的索引以零开始

var
  a: array of Integer;
begin
  SetLength(a, 500);
  a[0] := 0;
静态数组可以有任意索引

var
  i: Integer;
  b: array [50..100] of Integer;
  c: array[-10..10] of Integer; 
begin
  for i := 50 to 100 do b[i] := i * i;

  // Note negative starting index above in declaration
  for i := -10 to 10 do c[i] := i * i;
字符串的索引以一开头

var
  c: String;
begin
  c := 'Zap!';
  c[1] := 'W';
  ShowMessage(c); /// shows 'Wap!'
无论如何,您始终可以使用Low()和High()函数,它们返回数组的较低索引和较高索引


对于处理字符串列表,最常用的类是TStringList,它位于unitClasses

中,您使用的称为a,它不同于Pascal经典数组。动态数组大小可变,索引基于0

经典的Pascal数组不是基于0或1的。。。索引从哪里开始或结束取决于程序员。编译器唯一的限制是索引必须是序号类型。你可以申报

procedure x;
    var
        IntArr: array[50..75] of Integer;
        StrArr: array[0..49] of string;
        DblArr: array[1..10] of Double;

Delphi Pascal还有一个很好的功能,可以帮助迭代任何维度的数组:

仅用于
i:=Low(数组)到High(数组)do…

这对起始偏移量是完全透明的,即0、1或5或其他任何值。

我试图编辑上述答案以改进它,但编辑一直拒绝我的帖子。数组可以有负索引

它们都是相同的,一个包含20个整数的数组,但编译器不会将它们视为相同的数组,因为索引范围不同。允许您使数据适合问题域,而不是相反


现在,像
vars:string[200]这样的字符串
在技术上等同于char的
var s:packed array[0..200]
其中字节0是长度,除非您使用的字符串没有长度或指定的长度大于255,那么该字符串是1到当前大小的任意值。因为字符串可以是动态的,所以依赖第0个元素来包含长度是不好的。

当您使用
SetLength(array,length)
时,值得一提的是,它的索引从0开始,一直到length-1。在pascal中,数组上的索引也可以是ANSI表中的字符。因此,您可以定义整数的数组,如
a:array['a'..'Z']。当您需要计算字符串或字符数组中的所有字符时,这很方便。

您确定“简短声明”吗?也许您可以添加一个带有枚举类型索引的数组,如
Array[TAlign]of…
@Ulrich:您是对的。。。我从记忆中说的那句话根本无法编译。我的答案现在更新了。。。。甚至字符串=('False','True')的
数组[boolean]@MikeJ-UK几年前,当我遇到它时,它让我大吃一惊。您还可以执行
array[byte]
array[word]
等操作。。在我看来相当酷。我很久没有使用Pascal了,但是如果内存正常,那么字符串索引从1开始的原因是因为第一个元素是字符串长度,您可以直接编辑以更改长度+JachGrate为什么当问题是关于“Delphi 5.0 Pascal”时,这个答案已经过时了?:-)
var
    A:array[-20..9] of integer;
    B:array[-30..-10] of integer;