Array von 0 oder 1 in Delphi 5.0 Pascal beginnen?

8

Ich möchte eine ArrayList in Delphi 5.0 machen. Also habe ich eine Lösung für diesen Code gefunden:

%Vor%

OK, aber jedes Mal, wenn ich etwas hinzufüge, mache ich das:

%Vor%

Ich bin ein C ++ - Programmierer, und ich weiß nichts über Pascal. Ich habe immer gehört, dass ein Pascal-Index von 1, nicht 0, beginnt. Wie in der obigen Prozedur bin ich arr [len-1] wegen 0 index begin.

Gibt es einen besseren Weg als Pascal-Arrays? Wie bei C ++ std::vector ?

    
okami 03.11.2010, 00:48
quelle

5 Antworten

34

Die Indizes dynamischer Arrays beginnen mit null

%Vor%

Statische Arrays können beliebige Indizes haben

%Vor%

Die Indizes der Strings beginnen mit einem

%Vor%

Wie auch immer, Sie können immer Low () und High () Funktionen verwenden, die den unteren und oberen Index eines Arrays zurückgeben.

Für die Behandlung einer Liste von Strings ist die am häufigsten verwendete Klasse TStringList , die in der Einheit Klassen gefunden wird.

    
Trinidad 03.11.2010 00:58
quelle
10

Was Sie verwenden, ist als dynamisches Array bekannt, das sich von einem klassischen Pascal-Array unterscheidet. Dynamische Arrays sind in der Größe variabel und der Index ist 0 basiert.

Klassische Pascal-Arrays sind nicht 0 oder 1 ... Es liegt am Programmierer, wo der Index beginnt oder endet. Die einzige Compiler-Einschränkung ist, dass der Index ein ordinaler Typ sein muss. Sie können

deklarieren %Vor%     
jachguate 03.11.2010 01:00
quelle
6

Delphi Pascal hat auch eine nette Funktion, die hilft, durch ein Array jeder Dimension zu durchlaufen:

Einfach für i:= Low(Array) to High(Array) do.... verwenden Das ist völlig transparent für Start Offset, d. h. 0,1 oder 5 oder was auch immer.

    
Thaddy 18.01.2012 08:58
quelle
0

Ich habe versucht, die obige Antwort zu bearbeiten, um sie zu verbessern, aber der Redakteur lehnt mein Posting ab. Arrays können negative Indizes haben.

%Vor%

Diese sind beide gleich, ein Array von 20 ganzen Zahlen, wird aber vom Compiler nicht gleich behandelt, da der Indexbereich unterschiedlich ist. Ermöglicht Ihnen, die Daten an die Problemdomäne anzupassen und nicht umgekehrt.

Nun ist eine Zeichenkette wie var S:string[200]; technisch äquivalent zu var s:packed array[0..200] of char , wobei Byte 0 die Länge ist, außer wenn Sie eine Zeichenkette ohne Länge verwenden oder die angegebene Länge größer als 255 ist, dann ist die Zeichenkette 1 gleich welcher Stromstärke Größe ist es. Da Strings dynamisch sein können, ist es nicht gut, vom 0. Element abhängig zu sein, das die Länge enthält.

    
Paul Robinson 07.08.2013 04:32
quelle
0

Wenn Sie SetLength(array, length) verwenden, ist es erwähnenswert, dass es Indizes beginnend von 0 bis zu Länge 1 gibt. Auch in Pascal-Index für Array kann Zeichen aus ANSI-Tabelle sein. Sie können also ein Array wie a:array['A'..'Z'] of integer definieren. Dies ist praktisch, wenn Sie alle Zeichen in Ihren Strings oder Char Arrays benötigen.

    
Đumić Branislav 25.07.2017 08:27
quelle

Tags und Links