Delphi-PRAXiS
Seite 1 von 5  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   array als var-Parameter (https://www.delphipraxis.net/185698-array-als-var-parameter.html)

bernau 30. Jun 2015 10:18

array als var-Parameter
 
Ich möchte eine Procedure, die soll mehreren Integer-Variablen den Wert 0 zuweisen.

Ich dachte ich könnte folgendes realisieren.

Delphi-Quellcode:
procedure SetToZero(aValues: array of Integer);
var
  a: Integer;
begin
  for a := low(aValues) to High(aValues) do
    aValues[a] := 0;
end;
Und so soll die Funktion verwendet werden:

Delphi-Quellcode:
  lMenge1:=10;
  lMenge2:=20;
  SetToZero([lMenge1,lMenge2]);
Die Werte der Mengen ändern sich aber nicht. Sind immer noch 10 und 20.

Nun dachte ich, klar, fehlt der Var-Parameter. Also Funktion umgeschrieben und "var" vor avalues gesetzt.

Delphi-Quellcode:
procedure SetToZero(var aValues: array of Integer);
var
  a: Integer;
begin
  for a := low(aValues) to High(aValues) do
    aValues[a] := 0;
end;
Dann lässt sich folgende Zeile nicht mehr kompilieren.

Delphi-Quellcode:
SetToZero([lMenge1,lMenge2]);

Folgende Fehlermeldung:
Code:
[DCC Fehler] blubunit.pas(124): E2197 Konstantenobjekt kann nicht als Var-Parameter weitergegeben werden
Welchen Gedankenfehler mache ich?

DeddyH 30. Jun 2015 10:21

AW: array als var-Parameter
 
Bei dieser Art der Übergabe handelt es sich um ein Open Array, das ist immer konstant. Versuch es doch einmal mit einer Typdeklaration, und diesen Typ übergibst Du dann.

Sir Rufo 30. Jun 2015 10:22

AW: array als var-Parameter
 
Das Array nimmt nur die Werte auf und nicht die Referenzen/Zeiger zu den Variablen.

So kannst du nur die Werte im Array ändern, aber nicht die Variablen, wo diese Werte drin standen als du das Array erstellt hast ;)

DeddyH 30. Jun 2015 10:26

AW: array als var-Parameter
 
Arrays

TRomano 30. Jun 2015 10:26

AW: array als var-Parameter
 
Die Übergabe in
Delphi-Quellcode:
SetToZero([lMenge1,lMenge2]);
ist mMn ein
Delphi-Quellcode:
array of const
!

Du müsstest es wie folgt deklarieren:

Delphi-Quellcode:
type TArrayIntegers : TArray<integer>;

procedure SetToZero(var paInts : TArrayIntegers);
begin
  ...
end;

procedure Irgendwas;
var aIntegers : TArrayIntegers;
begin
  aIntegers := TArrayIntegers.Create(10,20);
  SetToZero(aIntegers);
end;
Ist jetzt schnell aus der Hüfte geschossen ...

Gruß Thomas

Sir Rufo 30. Jun 2015 10:30

AW: array als var-Parameter
 
Für alle, die es noch nicht verstanden haben ;)
Delphi-Quellcode:
procedure SetToZero( { ? } );
begin
  { ? }
end;

procedure Test;
var
  Val1, Val2 : Integer;
begin
  Val1 := 42;
  Val2 := 84;
  SetToZero([Val1,Val2]);
  Assert( ( Val1 = 0 ) and ( Val2 = 0 ), 'Mist, hat nicht hingehauen' );
end;

Neutral General 30. Jun 2015 10:35

AW: array als var-Parameter
 
Das geht wie Sir Rufo schon gesagt/angedeutet hat nur mit einem Array of PInteger.

Delphi-Quellcode:
procedure SetToZero(Werte: Array of PInteger);
var i: Integer;
begin
  for i:= 0 to High(Werte) do
    Werte[i]^ := 0;
end;

procedure Test;
var
  Val1, Val2 : Integer;
begin
  Val1 := 42;
  Val2 := 84;
  SetToZero([@Val1,@Val2]);
  Assert( ( Val1 = 0 ) and ( Val2 = 0 ), 'Mist, hat nicht hingehauen' );
end;
Wenn dich das @ nicht stört, gehts so. Ansonsten fällt mir jetzt nichts ein.

bernau 30. Jun 2015 10:36

AW: array als var-Parameter
 
Danke für die Antworten. Ich habe es mir schon gedacht.

Habe nur gehofft, daß es etwas gibt, was ich noch nicht weis. Schade.

Dann halt wieder:

Delphi-Quellcode:
lMenge1 = 0;
lMenge2 = 0;
lMenge3 = 0;
lMenge4 = 0;
Statt

Delphi-Quellcode:
SetToZero([lMenge1,lMenge2,lMenge3,lMenge4]);

Neutral General 30. Jun 2015 10:37

AW: array als var-Parameter
 
Zitat:

Zitat von bernau (Beitrag 1307174)
Dann halt wieder:

Delphi-Quellcode:
lMenge1 = 0;
lMenge2 = 0;
lMenge3 = 0;
lMenge4 = 0;
Statt

Delphi-Quellcode:
SetToZero([lMenge1,lMenge2,lMenge3,lMenge4]);

Schau dir mal meine Antwort an. Evtl hast du die übersehn als du die Antwort hier verfasst hast.
Oder kommt das nicht in Frage für dich?

bernau 30. Jun 2015 10:38

AW: array als var-Parameter
 
Zitat:

Zitat von Neutral General (Beitrag 1307173)
Das geht wie Sir Rufo schon gesagt/angedeutet hat nur mit einem Array of PInteger.
.
.
.
Wenn dich das @ nicht stört, gehts so. Ansonsten fällt mir jetzt nichts ein.

Da warst du schneller.

Ich denke ich bleibe beim Alten. Das "@" tut mir irgendwie im Auge weh ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:32 Uhr.
Seite 1 von 5  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz