Autor Beitrag
GruppeCN
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 322



BeitragVerfasst: Sa 17.09.05 22:57 
Hallo,

ich kenn mich mit Pointern nicht wirklich gut aus und benutzte bis jetzt immer den @ Operator. Allerdings glaube ich, dass es da eine andere Möglichkeit gibt, ich hab nur keinen Plan, wie ich das machen muss.

Also: Ich lege einen Pointer Typen an (type pBeispiel = ^TBeispiel). Jetzt habe ich eine Funktion, die einen Parameter vom Typ pBeispiel (also einen Pointer) erwartet. Ich lege jetzt eine Instanz der Klasse TBeispiel an und möchte an meine Funktion einen Pointer auf darauf übergeben. Wie geht das, ohne das @ Zeichen zu benutzen?

_________________
Warum sind die Sachen, die du suchst, immer da, wo du zuletzt nachsiehst?
Weil du aufhörst zu suchen, wenn du sie gefunden hast.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Sa 17.09.05 23:20 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
type
    PBeispiel =^TBeispiel;

procedure Foo(B: PBeispiel);
begin
    //Do something
end;

procedure Bar;
var
    B: TBeispiel;
    PB: PBeispiel;
begin
    PB := @B;
    Foo(PB);
    Foo(@B);
end;

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
GruppeCN Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 322



BeitragVerfasst: So 18.09.05 12:14 
Hi,

danke für die Antwort, aber ich möchte eben nicht den @ Operator verwenden.

_________________
Warum sind die Sachen, die du suchst, immer da, wo du zuletzt nachsiehst?
Weil du aufhörst zu suchen, wenn du sie gefunden hast.
Alstar
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 827



BeitragVerfasst: So 18.09.05 12:26 
Ich stelle mir die Frage, warum du den @-Operator nicht verwenden möchtest. Den gibt es, seit es Pointer gibt. Ist doch genauso, als wenn du einen String in ein PChar ohne PChar() umwandeln möchtest. Aber vielleicht proberst du es mal mit
ausblenden Delphi-Quelltext
1:
PB := Pointer(P);					

bzw
ausblenden Delphi-Quelltext
1:
PB := TPointer(P);					


(beides ungetestet!)

Alstar
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: So 18.09.05 12:44 
Zum Thema Pointer will ich (wiedereinmal) auf mein umfangreiches Tutorial verweisen, dass auf meiner Homepage zu finden ist: www.manuel-poeter.de
Dort solltest du (hoffentlich) die Antworten auf so ziemlich alle Fragen/Probleme finden..! ;)

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
GruppeCN Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 322



BeitragVerfasst: So 18.09.05 12:51 
Das Tutorial ist ganz gut, aber ich hatte mir das vorher schon zu Gemüte geführt. Allerdings hilft mir das auch nicht weiter. Meine Frage ist hauptsächlich, ob es eine alternative zum @ Operator gibt, oder nicht?

PS: Das mit dem Pointer() führt zu einem Zugriffsfehler.

_________________
Warum sind die Sachen, die du suchst, immer da, wo du zuletzt nachsiehst?
Weil du aufhörst zu suchen, wenn du sie gefunden hast.
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: So 18.09.05 12:59 
Was willst du denn für eine Alternative?? Der @Operator liefert dir die Adresse, an der der jeweilige Operand (meistens wohl eine Variable) liegt. Was soll es da für Alternativen geben? Entweder du brauchst eine Adresse, dann brauchst du den @-Operator, oder du hast bereits eine Adresse (weil du bereits mit einem Pointer arbeitest), dann brauchst du meistens keinen @-Operator mehr (außer du arbeitest mit Pointern auf Pointer).

Ich versteh nicht, was du da für eine Alternative willst/brauchst.. :?

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
Amateur
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 777

(Win98, WinMe) WinXP Prof
D3 Prof, D6 Pers, D2k5 Pers., Turbo C++ Explorer
BeitragVerfasst: So 18.09.05 13:27 
gibt es nicht auch noch die funktion addr() die genauso wie der @ operator funktioniert? dann wäre das doch die alternative. bin mir aber net sicher

_________________
"Kein dummes Gerede. Kein Rumrätseln. Denkt an nichts anderes mehr, nur noch an das, was vor euch liegt. Das ist die wahre Herausforderung. Ihr müßt euch vor euch selbst schützen, Leute." (Rennes in "Cube")
Beiträge: >700
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: So 18.09.05 13:35 
Addr() ist äquivalent zu @ aber wird durch die $T-Direktive nicht beeinflusst. Das alles würde auch in der Hilfe stehen.
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: So 18.09.05 13:39 
Gut Addr() kann man vielleicht als Alternative sehen:
OH hat folgendes geschrieben:
ausblenden Delphi-Quelltext
1:
function Addr(X): Pointer;					


Description

The Addr function returns the address of a specified object. X is any variable, procedure or function identifier. The result is a pointer to X.

The result of Addr is of the predefined type Pointer, which means that it is assignment-compatible with all pointer types but can't be dereferenced directly without a typecast.

Note: Addr is equivalent to the @ operator except that it is unaffected by the $T compiler directive.

Ob die Verwendung von Addr anstatt @ sinnvoll ist, lass ich allerdings dahingestellt..!

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: So 18.09.05 19:07 
Die Verwendung des @-Operators ist daher sicherer, weil er stärker ins Auge sticht und damit der entsprechende Source schneller auffindbar ist. Addr wirkt wie eine "normale" Funktion und ist daher für unübersichtliche Sources erst recht nicht zu empfehlen (Verwirrt nur).

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
GruppeCN Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 322



BeitragVerfasst: So 18.09.05 21:04 
Hm, jetzt wäre es noch gut zu wissen, was $T heißt?

_________________
Warum sind die Sachen, die du suchst, immer da, wo du zuletzt nachsiehst?
Weil du aufhörst zu suchen, wenn du sie gefunden hast.
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: So 18.09.05 21:34 
user profile iconGruppeCN hat folgendes geschrieben:
Hm, jetzt wäre es noch gut zu wissen, was $T heißt?

Ich gehe mal davon aus, dass du ein Delphi hast, und dass dieses auch über eine Online-Hilfe verfügt..! Hab ich recht? :roll:

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: So 18.09.05 21:37 
Einmal F1 drücken, bitte:

DOH hat folgendes geschrieben:
Typ Schalter
Syntax {$T+} oder {$T-}
{$TYPEDADDRESS ON} oder {$TYPEDADDRESS OFF}
Vorgabe (Kontrollfeld) {$T-}
ausblenden Delphi-Quelltext
1:
{$TYPEDADDRESS OFF}					

Bereich Gesamter Text

Anmerkungen

Die Direktive $T legt fest, welche Zeigertypen vom Operator @ generiert werden, und steuert deren Kompatibilität.
Im Status {$T-} ist das Ergebnis des Operators @ immer ein Zeiger ohne Typ (Pointer), der mit allen übrigen Zeigertypen kompatibel ist. Wenn @ im Status {$T+} für einen Variablenverweis verwendet wird, ist das Ergebnis ein typisierter Zeiger, der nur mit Pointer und den übrigen Zeigern auf den Variablentyp kompatibel ist.
Im Status {$T-} sind festgelegte Zeigertypen (also nicht vom allgemeinen Typ Pointer) nicht kompatibel (auch wenn sie Zeiger auf denselben Typ sind). Im Status {$T+}[delphi] sind Zeiger, die auf denselben Typ zeigen, kompatibel.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.