AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Wert eines Zeigers einem anderen Zeiger zuweisen
Thema durchsuchen
Ansicht
Themen-Optionen

Wert eines Zeigers einem anderen Zeiger zuweisen

Ein Thema von meisteralex · begonnen am 22. Jan 2009 · letzter Beitrag vom 22. Jan 2009
Antwort Antwort
Seite 1 von 2  1 2      
meisteralex

Registriert seit: 22. Nov 2005
173 Beiträge
 
#1

Wert eines Zeigers einem anderen Zeiger zuweisen

  Alt 22. Jan 2009, 12:49
Hi Leute, hab mal wieder ein für mich sehr unverständliches Verhalten von delphi zu beafragen:


Also ich hab ne Klasse die heißt TMyClass und 2 Zeiger auf Objekte der Klasse:
o_1 : ^TMyClass;
o_2 : ^TMyClass;

Nun weißt ich dem ersten Zeiger die Adresse mittels
o_1 := @TMyClass.create();
zu, was soweit auch funktioniert.
In o_2 möchte ich nun auch gerne diese Adresse haben, was ich mittels
o_1 := o_2;
probiere und was mir völlig logisch erscheint!

Delphi meldet jedoch: Incompatible Typen ?????
  Mit Zitat antworten Zitat
Jelen

Registriert seit: 5. Nov 2003
45 Beiträge
 
#2

Re: Wert eines Zeigers einem anderen Zeiger zuweisen

  Alt 22. Jan 2009, 13:03
Hast Du mal versucht, die Definition so zu schreiben:
type PMyClass = ^TMyClass;

o_1 : PMyClass;
o_2 : PMyClass;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

Re: Wert eines Zeigers einem anderen Zeiger zuweisen

  Alt 22. Jan 2009, 13:05
wieso willst du da Zeiger verwenden?

Objekte sind doch schon Zeiger
und so (wie du es machen willst), würdest du dann die Zeiger auf die Variable und nicht auf das Object übertragen.


Delphi-Quellcode:
Var o_1: TMyClass;
  o_2 : TMyClass;

o_1 = o_2;
$2B or not $2B
  Mit Zitat antworten Zitat
meisteralex

Registriert seit: 22. Nov 2005
173 Beiträge
 
#4

Re: Wert eines Zeigers einem anderen Zeiger zuweisen

  Alt 22. Jan 2009, 13:07
seit wann sind objekte (instanzen) zeiger ??
also wenn ich eine variable vom typ TMyClass deklariere
o_1 : TMyClass
dann kann ich doch davon ausgehen, dass o_1 somit vom typ TMyClass ist und nicht ein Zeiger.
Sorry ich komm aus der C++ - Welt, deshalb versteh ich vielleicht nur bahnhof
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

Re: Wert eines Zeigers einem anderen Zeiger zuweisen

  Alt 22. Jan 2009, 13:14
schon immer

die Objekt-Variable ist intern nur ein Pointer, welcher auf den Speicher der Objektinstanz zeigt.
(bei .Create wird der Speicher der Objectinstanz reserviert und diesem Zeiger zugewießen)




das beweißt zwar nichts, aber glaubst du ein riesiges Object paßt in 4 Byte rein?
Zitat:
Var o: TMyClass;

SizeOf(o) = 4
$2B or not $2B
  Mit Zitat antworten Zitat
meisteralex

Registriert seit: 22. Nov 2005
173 Beiträge
 
#6

Re: Wert eines Zeigers einem anderen Zeiger zuweisen

  Alt 22. Jan 2009, 13:18
dann versteh ich nicht, warum ich direkt ohne Derefferenzierung so etwas machen kann:

o_1 : TMyClass;
o_1 := TMyClass.create();

o_1.attrib := 33;


Rein logisch (und objektorientiert) gedacht, würde ich damit eine eigenschaft eines Zeigers ansprechen, die es für mich nicht gibt.
somit müsste es demnach heißen
o_1^.attrib := 33;

oder nimmt delphi hier in irgendeiner art und weise eine selbständige derefferenzierung vor ? so nach dem motto: "die leute sind zu dumm um zeigerarithmetik zu verstehen, deshalb machen wir es noch unlogischer" ???
  Mit Zitat antworten Zitat
Bomberbb

Registriert seit: 23. Sep 2003
227 Beiträge
 
#7

Re: Wert eines Zeigers einem anderen Zeiger zuweisen

  Alt 22. Jan 2009, 13:32
Das ist ein für- und wieder. Was meinst Du wie der Quelltext aussehen würde wenn Du bei allem, was Pointer ist, das explizit ansprechen musst. Nimm zum Beispiel Java, da werden alle intern gebrauchten Pointer verdeckt. Das empfinde ich als durchaus angenehm. Krasses Gegenteil: C, da wird das mit den Objekten soweit ich weiß, auch so gemacht wie Du Dir das vorstellst . Dass Delphi so ein Mischung daraus macht, finde ich selbst auch nicht so sehr angenehm, wird allerdings darauf zurückzuführen sein, dass man eine relativ alte Programmiersprache an neue Entwicklungen anpassen will/muss.
  Mit Zitat antworten Zitat
meisteralex

Registriert seit: 22. Nov 2005
173 Beiträge
 
#8

Re: Wert eines Zeigers einem anderen Zeiger zuweisen

  Alt 22. Jan 2009, 13:37
Nunja, eine gute Programiersprache zeichnet sich für mich im wesentlichen dadurch aus, dass sie eine einheitliche Struktur verfolgt.
Das ist einen Pointer auf der einen Seite wie ein Objekt behandeln muss und auf der anderen Seite wie einen Zeiger, sprich deutlich gegen mein Verständnis von logik.
Das ganze Konzept von C was du ansprichst bzw. C++ scheint ein bischen Gehirnschmalz zu kosten, um es zu verstehen, jedoch ist es einheitlich und eindeutig!

Nunja, anscheinend bleibt mir nichts anderes übrig als es so zu akzeptieren wie es ist....
  Mit Zitat antworten Zitat
Bomberbb

Registriert seit: 23. Sep 2003
227 Beiträge
 
#9

Re: Wert eines Zeigers einem anderen Zeiger zuweisen

  Alt 22. Jan 2009, 13:41
Nun, ich würde vom reinen Umgang her die Art von Java bevorzugen. Allerdings bin ich beruflich an Delphi gebunden...
Letztlich gibt es dazu wohl so viele Meinungen wie Programmiersprachen...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#10

Re: Wert eines Zeigers einem anderen Zeiger zuweisen

  Alt 22. Jan 2009, 13:54
Objecte werden delphiintern dereferenziert.

Delphi-Quellcode:
type TMyRec = record
       X: Integer;
     end;
     PMyRec = ^TMyRec;

Var R: PMyRec;

R^.X := 123;
R.X := 123;
bei Pointern wird auch automatisch dereverenziert (falls nötig)
- bei Objekten kann aber nicht per ^ manuell dereferenziert werden
- und bei Pointern wird es (seit 'ner Weile), als unsicher angesehn
( R^ = OK ... R^.X = hier kommt 'nen Hinweis ... R.X = gern gesehn ... wobei ich es hier blöd find, da ich eigentlich, wegen der Übersicht, lieber weiterhin R^.X gemacht hätte )
$2B or not $2B
  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 19:44 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