AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Wie krieg ich eine Referenz auf Array als Rückgabewert
Thema durchsuchen
Ansicht
Themen-Optionen

Wie krieg ich eine Referenz auf Array als Rückgabewert

Ein Thema von Oracle · begonnen am 19. Dez 2007 · letzter Beitrag vom 19. Dez 2007
Antwort Antwort
Seite 1 von 2  1 2      
Oracle
(Gast)

n/a Beiträge
 
#1

Wie krieg ich eine Referenz auf Array als Rückgabewert

  Alt 19. Dez 2007, 11:23
Hey Leute, sagt mal wie mache ich folgendes:

Ich habe eine Klasse die ein Array of double enthält.
Nun will ich in der Klasse eine Methode realisieren die mir einen Zeiger auf dieses Array liefert.

Delphi-Quellcode:

type
  TKlasse = class
    DatenArray : array of double;
    procedure GetRefDatenArray;
  end;


procedure TKlasse.GetRefDatenArray
begin
  // Hier möchte ich ein Referenz auf das DatenArray liefern
end;
Der Grund ist folgender. Das Array ist sehr groß, und deshalb will ich nicht dass es kopiert wird, sondern ich will lediglich eine Referenz haben, um mehr Performance und weniger Speicherverbrauch zu haben.

Vielen Dank an Euch schon mal im Vorraus
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#2

Re: Wie krieg ich eine Referenz auf Array als Rückgabewert

  Alt 19. Dez 2007, 11:27
Da es ein dynamisches Array ist, ist es automatisch intern ein Zeiger. Wenn du die Kopie verhindern willst, dann gib es als VAR Parameter weiter.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Wie krieg ich eine Referenz auf Array als Rückgabewert

  Alt 19. Dez 2007, 11:28
Stelle DatenArray als Read-Only-Property zur verfügung.

Quatch - wird ja dann kopiert.

Nochmal Edit:

Interne Implementierungsdetails (hier Array of double) sollten nicht nach außen sichtbar sein.
Erstell ein Array-Property und greif dann auf das interne array of double zu.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Oracle
(Gast)

n/a Beiträge
 
#4

Re: Wie krieg ich eine Referenz auf Array als Rückgabewert

  Alt 19. Dez 2007, 11:36
@Mütze: du hast mich missverstanden. Ich will nicht das Array an die Funktion übergeben. Dann ist klar dass ich mit var vor dem Parameter eine Referenz übergebe. Was ich machen will ist die andere Richtung. Ich möchte die Methode aufrufen und von ihr eine Referenz des Arrays zurückgeliefert bekommen.
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#5

Re: Wie krieg ich eine Referenz auf Array als Rückgabewert

  Alt 19. Dez 2007, 11:51
Meinst du das so?
Delphi-Quellcode:
type
  TMyarray = array of double;
  TKlasse = class
  private
    fDatenArray : TMyarray;
    function getDatenArray: TMyarray;
  public
    property DatenArray: TMyarray read getDatenArray;
  end;

{ TKlasse }

function TKlasse.getDatenArray: TMyarray;
begin
  result:=fDatenArray;
end;
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#6

Re: Wie krieg ich eine Referenz auf Array als Rückgabewert

  Alt 19. Dez 2007, 11:54
Zitat von Oracle:
@Mütze: du hast mich missverstanden. Ich will nicht das Array an die Funktion übergeben. Dann ist klar dass ich mit var vor dem Parameter eine Referenz übergebe. Was ich machen will ist die andere Richtung. Ich möchte die Methode aufrufen und von ihr eine Referenz des Arrays zurückgeliefert bekommen.
Nein, habe ich nicht. Wenn es eine solche Möglichkeit für ein Result gibt, dann hätte ich dir das geschrieben - gibt es aber nicht.

@generic: Das Result ist bei dir auch eine Kopie und nicht das originale Array. Dein Result landet in einer lokalen Variable (also der Zeiger) und somit wird es eine Kopie, da jedes Resize etc sich nur auf die lokale Variable auswirkt und somit niemals die Adresse in der Instanz aktualisiert wird.
  Mit Zitat antworten Zitat
Oracle
(Gast)

n/a Beiträge
 
#7

Re: Wie krieg ich eine Referenz auf Array als Rückgabewert

  Alt 19. Dez 2007, 12:58
hmmmm....es muss doch eine Möglichkeit geben, einfach nur einen Zeiger auf ein Array aus einer Funktion zurückbekommen.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Wie krieg ich eine Referenz auf Array als Rückgabewert

  Alt 19. Dez 2007, 13:00
Ein Array ist doch schon ein Zeiger.
Markus Kinzler
  Mit Zitat antworten Zitat
Oracle
(Gast)

n/a Beiträge
 
#9

Re: Wie krieg ich eine Referenz auf Array als Rückgabewert

  Alt 19. Dez 2007, 13:34
Um es genau zu sagen, die Funktion soll mit die Speicheradresse zurückliefern unter der das Array gespeichert ist. Und nicht das Array kopieren, und mir einen Zeiger auf das kopierte Array liefern. Weil ich sonst eine Menge Speicher verschwendet wird.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Wie krieg ich eine Referenz auf Array als Rückgabewert

  Alt 19. Dez 2007, 13:36
Na du kannst einfach einen Pointer zurückgeben. Aber daraus einfach eine zweite Referenz auf das Array hinzubiegen, dass dürfte der Compiler nicht so ohne weiteres mitmachen.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 08:18 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