Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
404to408
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
404to408
404to408
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Pointer?

Pointer?
Michael
Hallo Leute,
kurz: was sind Pointer und wozu braucht man die?
mfg
Michael

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: In welchem Zusammenhang steht Deien Frage?
Uwe
Pointer ist ersteinmal ein Zeiger, also ein Instrument, das auf etwas anders verweist.
Gruß!

AW: In welchem Zusammenhang steht Deien Frage?
Michael
Hallo,
habe im Beitrag weiter unten Pointer gelesen und erinnerte mich an diverse C/C++ Vorlesungen. Da habe ich Pointer mal gehört, aber nie verstanden für was die gut sind!
Für was braucht man die in (XL)-VBA?
Viele Grüsse
Micha
AW: In welchem Zusammenhang steht Deien Frage?
Uwe
Nun, Micha,
Deien Erinnerung trügt Dich bestimmt nicht, denn ich kann mir nicht vorstellen, dass eine C/C++-Vorlesung nicht sehr rasch zum Instrument des Pointers vordringt.
Vielleict hast Du aber eine Vorleseung versäumt, denn das Prinzip des Pointer ist relativ simpel, wenn man es mit anderen Worten beschreibt und nicht gleich in die Besonderheiten der Operationen mit Pointers eindringt.
Wo allerdings bei VBA besonders von Pointer die Rede ist, weiß ich nicht; verwendet werden ein Pointer indirekt, durch die Übergabe eines Wertes ByRef (Übergabe bei Referenz).
Eine einfache Referenz (oder eben ein Pointer) ist nicht anderes, als eine Variable, die die Adresse des Beginns eines Speicherplatzes enthält, an dem der Start des Inhaltes der eigentliche Variable/Struktur bzw. des Arrays beginnt.
Ein Pointer in C/C++ ist also wie eine Variable zu deklarieren, also auch mit der Information des Datentyps, auf den der Zeiger weisen soll. Dadurch "behinhaltet der Pointer das Wissen", wie groß der Speicherbereich eines Elementes ist, auf den er verweist.
Hat z.B. der Datentyp double einen Platzbedarf von 8 Bytes, so kann eine Pointer vom Typ double angelegt werden ( double *ptrd in C/C++; *** ByRef prtd as Double, wobei *** für verschiedene Deklarationstypen oder Aufrufe steht).
Diese Variable, der Pointer, belegt im Speicher einen Platz, der ausreicht, um die Größe der Adresse einer beliebigen Speicherstellung je nach Modell, aufnehmen zu können. Nun unterscheidet sich C/C++ und VBA-Basic vermutlich grundlegend. Für das weiter Verständnis hier, genügt es festzustellen, dass, sobald eine Variable deklariert oder angelegt/übergeben wird, ein Speicherplatz gesucht wird, in dem der Wert der Variablen geschrieben wird und gleichzeitig die Adresse in dem Zeiger notiert wird.
Soweit sollte der Zeiger verständlich sein, er ist der "Schlüsselcode" zum Auffinden des Variablenwert bzw. dessen Speicherplatz selbst.
Wird nun ein Parameter ByVal an eine Unterroutine übergeben, so wird in der Unterroutine ein Duplikat angelegt; es existieren also zu diesem Zeitpunkt des Ausführens der aufgerufenen Routine mindesten zwei Speicherstellen, die die Varibale enthält. Im Unterprogramm wird nun nur die Kopie benutzt, die nach beendigung des Progamms "verschwindet" (Speicherplatz der Kopie wird freigegeben), während die Ursprungsvariable, die als Kopie übergeben wurde nicht angetastet wurde und somit weiterhin den Wert behält, den sie beim Aufruf des Unterprogrammes hat.
Anders ist es, wenn ich den Pointer/Zeiger übergebe (ByRef.. Standard in VBA), dann wird, das der eigentliche Variablenwert indirekt über den Inhalt des Zeigers angesprochen wird, in der Unterfunktion verändert.

Sub main()
Dim ptr As Double, val As Double
Dim text As String
ptr = 5#
val = 5#
Cells(1, 1) = Str(ptr) + " = ptr in Main vor Aufruf CallByRef"
Cells(2, 1) = Str(val) + " = val in Main vor Aufruf CallByVal"
Call CallByRef(ptr)
Call CallByVal(val)
Cells(7, 1) = Str(ptr) + " = ptr in Main nach Aufruf CallByRef"
Cells(8, 1) = Str(val) + " = val in Main nach Aufruf CallByVal"
End Sub
Sub CallByRef(ByRef ptr As Double)
ptr = 2 * ptr
Cells(4, 1) = Str(ptr) + " = ptr in CallByRef"
End Sub
Sub CallByVal(ByVal val As Double)
val = 2 * val
Cells(5, 1) = Str(val) + " = value in CallByVal"
End Sub


Ich hoffe, die notwendigenInformationenzur Beantwortung Deiner Fragen gegeben zu haben. Über Zeigerarithmetik habe ich hier geschwiegen, da sie in VBA meines Wissens nach ohne Bedeutung für die programmierung via VBA ist.
Gruß!
Anzeige
AW: In welchem Zusammenhang steht Deien Frage?
michael
Hi,
danke für die umfassende Erklärung!
Ein bißel fiel mir beim Lesen wieder ein, danke.
den COde schau ich mir jetzt mal an!
Gruß

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige