AGB  ·  Datenschutz  ·  Impressum  







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

Variablen mit @ und ^

Ein Thema von quendolineDD · begonnen am 26. Aug 2007 · letzter Beitrag vom 27. Aug 2007
Antwort Antwort
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#1

Variablen mit @ und ^

  Alt 26. Aug 2007, 20:50
Ich las nun schon öfters in verschiedenen Quellcodes von Variablen, welche mit einem @variable bzw Zuweisungen mit x = ^moep; Ich hab nun schon in Google geschaut und mir einige Tutorials hier im Forum durchsucht, aber bin noch zu keiner Erläuterung der Funktion einer solchen Zuweisung gekommen.

Vielleicht könnte mir einer von euch dabei behilflich sein, bzw. eventuell hat jemand einen passenden Link parat

Danke im Vorraus
Gruß quen
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.639 Beiträge
 
#2

Re: Variablen mit @ und ^

  Alt 26. Aug 2007, 20:52
Das sind Pointerfunktionen.

@ liefert die Adresse im Speicher des Objektes zurück, dessen Name danach folgt.
Also:
@variable = Adresse von variable im Speicher.

^ dereferenziert eine solche Adresse wieder.
Also: ^pointerAufVariable = variable.

Bzw: ^@variable = variable.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Variablen mit @ und ^

  Alt 26. Aug 2007, 20:52
@variable: Ist ein Zeiger auf die Speicherstelle der Variable
x = ^moep; Deferenziert einen Zeiger auf eine Variable.
Markus Kinzler
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#4

Re: Variablen mit @ und ^

  Alt 26. Aug 2007, 22:50
Wollt ihr beide vielleicht nicht das ^ nach dem zu dereferenzierenden Bezeichner setzen?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Variablen mit @ und ^

  Alt 26. Aug 2007, 22:58
Zitat von Muetze1:
Wollt ihr beide vielleicht nicht das ^ nach dem zu dereferenzierenden Bezeichner setzen?
Ups. Mancham liest man was man glaubt zu lesen.
^moep erzeugt natürlich einwn Zeiger auf eine Struktur/Variable
Markus Kinzler
  Mit Zitat antworten Zitat
markusj

Registriert seit: 9. Dez 2005
Ort: Kandel
408 Beiträge
 
#6

Re: Variablen mit @ und ^

  Alt 26. Aug 2007, 23:01
Puh, ich hab schon an meinem (bescheidenen) Wissen gezweifelt ...
Aber wenn wir schon dabei sind, gibts irgendwo ein Tut welches das Rumgepointere _detailliert_ erklärt?
Manchmal bin ich dann doch ein wenig verwirrt, warum die eine Zuweisung geht, die andere aber nicht ...

mfG
Markus
Markus
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Variablen mit @ und ^

  Alt 26. Aug 2007, 23:03
@ erzeugt einen Pointer auf die Speicherstelle (untypisiert). ^ auf die Struktur (typisiert).
Markus Kinzler
  Mit Zitat antworten Zitat
markusj

Registriert seit: 9. Dez 2005
Ort: Kandel
408 Beiträge
 
#8

Re: Variablen mit @ und ^

  Alt 26. Aug 2007, 23:08
Aha, das erklärt dann schon einiges.
Danke und gute Nacht.

mfG
Markus
Markus
  Mit Zitat antworten Zitat
Mark90
(Gast)

n/a Beiträge
 
#9

Re: Variablen mit @ und ^

  Alt 27. Aug 2007, 11:48
von dsdt


Zeiger

Bei Zeigern handelt es sich um Variablen, die eine Speicheradresse enthalten. Eine Zeigervariable zeigt also auf eine bestimmte Stelle im Arbeitsspeicher. Zum einen gibt es den Typ Pointer, der auf beliebige Daten zeigt und zum anderen spezialisierte Zeigertypen.

In der Delphi-Sprache kommen Zeiger (auch Referenzen genannt) häufig vor, so z.B. bei Objektreferenzen, bei langen Strings und bei dynamischen Arrays. An der Syntax fällt das an diesen Stellen nicht auf. Will man Zeiger auf selbstdefinierte Typen erstellen, muss dagegen die noch aus Pascal-Zeiten stammende Zeigersyntax mit @ und ^ verwendet werden.

Unter .NET sollten Zeiger nicht mehr verwendet werden.

Doch zunächst ein Beispiel zur Deklaration von Zeigern:

type
PAdressRecord = ^TAdressRecord;
TAdressRecord = record
name: string;
plz: integer;
ort: string;
end;

var adresse: TAdressRecord;
adresszeiger: PAdressRecord;

^ zur Zeigertypdefinition

Steht das Symbol ^ vor einem Typbezeichner, wird daraus ein Typ, der einen Zeiger auf den ursprünglichen Typ darstellt. ^TAdressRecord ist ein Zeigertyp auf einen Speicherbereich, an dem sich etwas vom Typ TAdressRecord befinden muss.
@ zur Ermittlung einer Speicheradresse

Anfänglich zeigt unsere Variable adresszeiger ins Leere - auf nil (not in list). Wir wollen nun, dass er auf die Variable adresse zeigt. Da ein Zeiger sich bekanntlich nur Speicheradressen merken kann, benötigen wir die Speicheradresse unserer Variable adresse. Diese ermitteln wir mit dem Operator @:

adresszeiger := @adresse;

^ zur Dereferenzierung


Nun können wir auch über den Zeiger auf den Inhalt von adresse zugreifen. Wir wollen also, dass uns der Zeiger nicht die Adresse bekannt gibt, auf die er zeigt, sondern den Wert an dieser Speicherstelle. Diesen Vorgang nennt man Dereferenzieren. Verwendet wird dafür wieder das Symbol ^ - allerdings diesmal hinter einer Zeigervariablen:

var gesuchterName: string;
begin
gesuchterName := adresszeiger^.name;

Eine Dereferenzierung ist nur mit spezialisierten Zeigern möglich, nicht mit dem Allround-Talent Pointer. Um auch mit dem Typ Pointer entsprechend arbeiten zu können, muss dieser in einen anderen Zeigertyp umgewandelt werden.
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#10

Re: Variablen mit @ und ^

  Alt 27. Aug 2007, 12:31
Zitat von mkinzler:
@ erzeugt einen Pointer auf die Speicherstelle (untypisiert)
Solange man nicht die Compileroption "Typisierter @-Operator" aktiviert.

Zitat von Mark90:
Anfänglich zeigt unsere Variable adresszeiger ins Leere - auf nil (not in list).
Nur, wenn es sich um eine globale Variable handlet. Wenn die Zeigervariable eine lokale Variable ist (also auf dem Stack liegt), dann ist ihr Startwert undefiniert (bis man ihr einen Wert zuweist).
  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 08:01 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