Buchempfehlung
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
"Der" Petzold, das über 1000 Seiten starke Standardwerk zum Win32-API - besonders nützlich u. a. bei der GUI-Programmierung in FreeBASIC! [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Referenz - At

Referenz-Navigation

 

Syntax: @ { Variable | Stringkonstante | Prozedur }
Typ: Operator
Kategorie: Operatoren

Der @-Operator gibt die Adresse seines Operanden zurück. @ kann anstelle jeder beliebigen FB-eigenen xxxPTR-Funktion benutzt werden (abgesehen von BefehlsreferenzeintragSTRPTR bzw. BefehlsreferenzeintragSADD).

Wenn der @-Operator mit einem String variabler Länge benutzt wird, gibt er einen Pointer auf den internen BefehlsreferenzeintragSTRING-Bezeichner zurück. Benutzen Sie STRPTR oder SADD, um die Adresse der eigentlichen Zeichen zu erhalten. Siehe auch BefehlsreferenzeintragSTRING (Datentyp) für Informationen zum STRING-Bezeichner bzw. dem internen Management von Zeichenketten.

Wenn dieser Operator mit einem Array verwendet wird, gibt er einen BefehlsreferenzeintragPointer auf das per Index angegebene Element des Arrays zurück. Beispielsweise gibt

@myArray(7)

einen Pointer auf myArray(7) zurück. Um einen Pointer auf den Beginn eines Arrays zu erhalten, geben Sie den niedrigsten Index an (siehe BefehlsreferenzeintragLBOUND).

@ kann mithilfe von BefehlsreferenzeintragOPERATOR überladen werden.

Beispiel 1:

DIM AS INTEGER a, b
DIM AS INTEGER PTR addr

a = 5
b = 10

PRINT "Der Wert von a ist "; a;
PRINT "; er ist gespeichert an Adresse "; @a
PRINT "Der Wert von b ist "; b;
PRINT "; er ist gespeichert an Adresse "; @b

' Die Adresse von a wird jetzt in dem
' INTEGER PTR gespeichert:
addr = @a

PRINT "Der Pointer addr zeigt jetzt auf a."
PRINT "Der Wert von a kann mit dem Pointer ";
PRINT "ermittelt werden: "; *addr
SLEEP

Während der Operator bei Strings variabler Länge nicht auf den Inhalt der Zeichenkette zeigt, kann er bei Stringkonstanten angewandt werden.

Beispiel 2:

DIM  AS  ZSTRING  PTR  YesNoMaybe(2) => { _
  @"ja", @"nein", @"vielleicht" }
DIM AS INTEGER i

PRINT "Standard-Liebesbrief v7.23"
PRINT
PRINT "Willst du mit mir gehen?"
PRINT
FOR i = 0 TO 2
  PRINT i; ")", *YesNoMaybe(i)
NEXT
DO
  i = VAL(INPUT(1))
LOOP UNTIL i < 3
PRINT
PRINT "Du hast "; *YesNoMaybe(i); " gesagt."
SLEEP

Möglich ist auch die Verwendung dieses Operators mit Prozeduren:

DECLARE SUB Morgen
DECLARE SUB Mittag
DECLARE SUB Nacht

RANDOMIZE

SCREENRES 320, 200

DIM Tageszeit(2) AS SUB ()
DIM AS INTEGER i

Tageszeit(0) = @Morgen()
Tageszeit(1) = @Mittag()
Tageszeit(2) = @Nacht()

i = INT(RND*3)
Tageszeit(i)()
SLEEP

SUB Morgen
  PAINT  (  0,   0), 176
  CIRCLE (100, 120), 50, 42, , , , F
  CIRCLE ( 50, 199), 200, 192, , , .5, F
  CIRCLE (319, 199), 100, 195, , , .3, F
END SUB

SUB Mittag
  PAINT  (  0,   0), 53
  CIRCLE (170,  60), 50, 44, , , , F
  CIRCLE ( 50, 199), 200, 120, , , .5, F
  CIRCLE (319, 199), 100, 123, , , .3, F
END SUB

SUB Nacht
  PAINT (0, 0), 0
  DIM AS INTEGER i
  FOR i = 0 TO 200
    PSET (RND * 320, RND * 200), 31
  NEXT

  CIRCLE (170,  40), 30, 27, , , , F
  FOR i = 0 TO 10
    CIRCLE (COS( 6.28 * i / 5) * RND*23 + 170, _
        SIN ( 6.28 * i / 5 ) * RND*23 + 40 ), _
        RND*2 + 3, 23, , , , F
  NEXT

  CIRCLE ( 50, 199), 200, 240, , , .5, F
  CIRCLE (319, 199), 100, 243, , , .3, F
END SUB

Die Verwendung mit Prozeduren stellt auch die Grundlage für Callbacks dar.

Unterschiede zu QB: neu in FreeBASIC

Siehe auch:
Befehlsreferenzeintrag* (Wert von), Befehlsreferenzeintrag[ ] (Pointer-Indizierung), BefehlsreferenzeintragPfeil, BefehlsreferenzeintragVARPTR, BefehlsreferenzeintragPROCPTR, BefehlsreferenzeintragSTRPTR, BefehlsreferenzeintragSADD, BefehlsreferenzeintragPointer


Zusätzliche Informationen und Funktionen
  • Der Referenzeintrag wurde am 06.08.2007 von AdministratorSebastian angelegt.
  • Die aktuellste Version wurde am 02.01.2013 von Redakteurnemored gespeichert.
  Versionen Versionen