AGB  ·  Datenschutz  ·  Impressum  







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

Dereferenzierungsoperator ^

Ein Thema von JnZn558 · begonnen am 6. Mai 2010 · letzter Beitrag vom 6. Mai 2010
Antwort Antwort
JnZn558

Registriert seit: 22. Aug 2004
98 Beiträge
 
#1

Dereferenzierungsoperator ^

  Alt 6. Mai 2010, 15:40
Delphi-Quellcode:

type
  
  ptest = ^test;
  test = record
     a: integer;
  end;

var
   pp: ptest;
   p: test;

   p.a := 3;
   pp := @p;
   writeln(IntToStr( pp.a ) ); // es wundert mich, wieso das hier auch funktioniert.
   writeln(IntToStr( pp^.a ) ); // das hier is der ueblich, den ich kenne.
wieso funktioniert es auch ohne derefenzierung operator? wenn es "einwandfrei" funktioniert, dann kann man wohl auch das ^ wohl weglassen oder?
Peace on the world
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.685 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: Dereferenzierungsoperator ^

  Alt 6. Mai 2010, 15:47
Der "." vereint im gewissen Sinne die C-Operatoren "." und "->", und Delphi versucht dabei intelligent vorzugehen. Wenn man einer (typisierten!) Zeigervariablen den "." folgen lässt, geht der Compiler automatisch davon aus, dass man wohl dereferenzieren wollte. Gleiches gilt ja auch bei Klasseninstanzen, die auch eiegntlich nur Pointer sind, wo es aber semantisch richtiger ist nicht explizit dereferenzieren zu müssen, da zumindest theoretisch Referenz<>Pointer ist.
Ist ein wenig inkonsequent, aber kam wohl mit der OO als Nebeneffekt mit dazu. Ich persönlich würde explizite Dereferenzierung bevorzugen, da dann im Kontext ersichtlich ist, dass es da wirklich explizit auch semantisch um einen Pointer geht.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Dereferenzierungsoperator ^

  Alt 6. Mai 2010, 15:49
Delphi ist in diesem Fall gutmütig. Eigentlich muss man einen Zeiger dereferenzieren. In FreePascal ist es auch ein Muss.
Markus Kinzler
  Mit Zitat antworten Zitat
JnZn558

Registriert seit: 22. Aug 2004
98 Beiträge
 
#4

Re: Dereferenzierungsoperator ^

  Alt 6. Mai 2010, 15:56
gut zu wissen, es mag fuer anfaenger gut zu sein, diese moeglichkeit kann aber bei programmfehler sehr schwer zu finden sein. dagegen is strikte regeln wie C++ etwas besser.
Peace on the world
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Dereferenzierungsoperator ^

  Alt 6. Mai 2010, 15:59
Mit C/C++ als strikt zu bezeichnen, wäre ich jetzt vorsichtig. Normalerweise ist Delphi die striktere Sparche ( obwohl diese im Vergleich zu Pascal etwas gelockert wurde, u.a. auch wegen C++/C-Builder VCL)
Markus Kinzler
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.685 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: Dereferenzierungsoperator ^

  Alt 6. Mai 2010, 16:01
Nuja, dafür ist Delphi an vielen anderen Stellen deutlich strikter als C. Aber wie gesagt, ich bevorzuge auch auf jeden Fall die "richtigere" Notation, ohne von dieser Krücke gebrauch zu machen. Wobei die Möglichkeiten damit wirklich mal auf die Nase zu fallen auch nicht wirklich viele sind, bzw. schon recht speziell - so dass ich eher nicht glaube, dass ein Anfänger jemals darauf stoßen würde.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#7

Re: Dereferenzierungsoperator ^

  Alt 6. Mai 2010, 16:35
Weitere philosophische Betrachtungen zu dem Thema Dereferenzierungsoperator finden sich auch hier
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Dereferenzierungsoperator ^

  Alt 6. Mai 2010, 18:42
Man muß in diesem Fall nur wissen, daß Delphi weiß, sobald man über den Punkt zugreift, daß man natürlich nur den Dereferenzierten Pointer meinen kann und es demnach automatisch dereferenzieren kann.

Ist genauso wie bei Prozedur-Zeigern, wenn man soeinem Zeiger eine Prozedur zuweisen will, dann benötigt man kein @.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:43 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