Buchempfehlung
Windows System Programming
Windows System Programming
Das Kompendium liefert viele interessante Informationen zur Windows-Programmierung auf Englisch. [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 - Eckige Klammern

Referenz-Navigation

 

Die eckigen Klammern können in FreeBASIC für zwei Sprachkonstrukte eingesetzt werden:



String-Indizierung
Syntax: Stringvariable[Index]
Der Stringindizierungs-Operator [ ] ermöglicht es dem Programmmierer, einzelne Zeichen eines Strings über einen Index anzusprechen; dabei ist Lese- und Schreibzugriff möglich. Für BefehlsreferenzeintragSTRINGs, BefehlsreferenzeintragZSTRINGs fester Länge und BefehlsreferenzeintragWSTRINGs fester Länge ist der Rückgabewert der ASCII-Code des indizierten Zeichens. Der Programmierer muss sicherstellen, dass die Indizes von 0 bis LEN(Stringvariable)-1 reichen; andernfalls können die Ergebnisse nicht vorhergesagt werden, da ein Zugriff auf Speicherbereiche auftritt, der nicht mehr zur STRING-Variable gehört, evtl. sogar nicht mehr zum Speicherbereich des laufenden Programms.

Beispiel:

DIM txt AS STRING = "Hallo, world!"
DIM i AS INTEGER
txt[1] = 101  ' im zweiten Buchstaben a durch e tauschen
FOR i = 0 TO LEN(txt) - 1
  PRINT CHR(txt[i]);
NEXT
SLEEP

Ausgabe:

Hello, World!



Pointerindizierung
Syntax: Pointer[index]
Die Pointerindizierung ermöglicht mittels eines Index den Zugriff auf eine Adresse relativ zur Adresse, auf die der BefehlsreferenzeintragPointer zeigt. Die Adresse im Speicher, auf die tatsächlich zugegriffen wird, errechnet sich nach:

Adresse = Pointer + index * SIZEOF(*Pointer)

Der Pointer wird dabei nicht verändert. Der Programmierer muss selbst sicherstellen, dass der Pointer auf eine sinnvolle Adresse zeigt.

Beispiel:

DIM a(10) AS INTEGER
DIM pa AS INTEGER PTR

FOR i AS INtEGER = 0 To 10
  ' Das Array mit den Werten von 0 bis 10 befüllen
  a(i) = i
NEXT i
pa = @a(0)

' Den Inhalt des Arrays ausgeben:
FOR i AS INTEGER = 0 TO 10
  PRINT pa[i]
NEXT i
SLEEP

Ausgabe:

 0
 1
 2
 3
 4
 5
 6
 7
 8
 9
 10

Operator-Überladung
[] lässt sich als BefehlsreferenzeintragOperator innerhalb von eigenen BefehlsreferenzeintragTypes überladen.

Beispiel:

Type StringWrapper
    As String s

    Declare Operator [] (ByVal index As Integer) ByRef As UByte
End Type

Operator StringWrapper.[] (ByVal index As Integer) ByRef As UByte
    Return s[index]
End Operator

Dim As String foo = "foo"

Dim As StringWrapper sw
sw.s = "foo"

Print foo[0], foo[1], foo[2]
Print sw[0],  sw[1],  sw[2]
Sleep

Unterschiede zu QB: neu in FreeBASIC

Unterschiede zu früheren Versionen von FreeBASIC: Der Indexoperator [] ist seit FreeBASIC 1.00.0 überladbar.

Siehe auch: BefehlsreferenzeintragAddition und BefehlsreferenzeintragSubtraktion bei Pointern


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