AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

array als var-Parameter

Ein Thema von bernau · begonnen am 30. Jun 2015 · letzter Beitrag vom 2. Jul 2015
Antwort Antwort
Seite 1 von 5  1 23     Letzte »    
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.294 Beiträge
 
Delphi 12 Athens
 
#1

array als var-Parameter

  Alt 30. Jun 2015, 11:18
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.

SetToZero([lMenge1,lMenge2]);
Folgende Fehlermeldung:
Code:
[DCC Fehler] blubunit.pas(124): E2197 Konstantenobjekt kann nicht als Var-Parameter weitergegeben werden
Welchen Gedankenfehler mache ich?
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.617 Beiträge
 
Delphi 12 Athens
 
#2

AW: array als var-Parameter

  Alt 30. Jun 2015, 11:21
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: array als var-Parameter

  Alt 30. Jun 2015, 11:22
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
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.617 Beiträge
 
Delphi 12 Athens
 
#4

AW: array als var-Parameter

  Alt 30. Jun 2015, 11:26
Arrays
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von TRomano
TRomano

Registriert seit: 24. Nov 2004
Ort: Düsseldorf
192 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: array als var-Parameter

  Alt 30. Jun 2015, 11:26
Die Übergabe in SetToZero([lMenge1,lMenge2]); ist mMn ein 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
Thomas Forget
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: array als var-Parameter

  Alt 30. Jun 2015, 11:30
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;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: array als var-Parameter

  Alt 30. Jun 2015, 11:35
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.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.294 Beiträge
 
Delphi 12 Athens
 
#8

AW: array als var-Parameter

  Alt 30. Jun 2015, 11:36
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

SetToZero([lMenge1,lMenge2,lMenge3,lMenge4]);
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

AW: array als var-Parameter

  Alt 30. Jun 2015, 11:37
Dann halt wieder:

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

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?
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.294 Beiträge
 
Delphi 12 Athens
 
#10

AW: array als var-Parameter

  Alt 30. Jun 2015, 11:38
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
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 5  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:47 Uhr.
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