STARGÅTE hat geschrieben:Das war auch für mich am anfang unverständlich, warum einerseits:
Bei Structuren aber das * "einfach weggelassen wird" und es somit nicht möglich ist:
Vermutlich wegen der Lesbarkeit. Ich zumindest find es so am praktischsten,
letzten endes ist es aber wohl ne einfache Meinungsfrage und damit obliegt es
der Entscheidung des Entwicklers (Fred), was er uns präsentiert.
Wichtig ist nur, das man bedenken muss, das ein Zeiger bei der definition
immer nur den Speicher für den Zeiger reserviert, aber nicht für die dahinter
liegende Struktur.
Code: Alles auswählen
Structure MeineStructure
Quad.q
Long.l
Word.w
Byte.b
EndStructure
Structure PointerTest
*pTest.MeineStructure
EndStructure
Structure ValueTest
Test.MeineStructure
EndStructure
Debug SizeOf(PointerTest)
Debug SizeOf(ValueTest)
wegen den *** ... , jo wäre schön,
Aber derzeit kann man sich ja auch mit __ zufrieden geben:
Code: Alles auswählen
Define *Pointer.Integer = @Integer
Define *_Pointer.AllTypes = @*Pointer
Define *__Pointer.AllTypes = @*_Pointer
Es geht vermutlich nicht, weil das * genauso wir das $ bei Strings nichtim eigentlichen Sinne zum Variablennamen gehört, also kein zugelassenes Zeichen ist wie zb der Unterstrich.
Das * ist in C im prinzip ein extra Datentyp, nur behandelt C diesen so wie
PB Strukturen. Gibt man bei der Variablendefinition in C zusätzlich ein * an,
referenziert C gleich zwei Speicherblöcke, ein mal den Zeigern und ein mal
die tatsächlichen Daten, wobei der Zeiger natürlich auf die Speicheradresse
der Daten verweist. Während man in C somit einfach
schreiben kann, muss man in PB
Code: Alles auswählen
*width.INTEGER = AllocateMemory(Sizeof(Integer))
*width\i = 34
schreiben. Das * bei PB ist somit eher ein einfacher Datentyp wie .i oder .s.
Eine Variable kann immer nur einen einfachen Datentyp haben, deswegen
ist ein *Variable.i auch nach wie vor Quatsch und ein Zeiger kann auch nicht
gleichzeitig zu zwei unterschiedlichen Speicheradressen zeigen.

Das *
hat in C eine Sonderrolle, während PB das * nur in verbindung mit komplexen
Datentypen (Strukturen) eine Sonderrolle zu spricht.
Der @-Operator kann ebenfalls nicht verdoppelt werden, weil dieser die
Adresse der dahinter stehenden Variable zurück gibt. Und eine
Speicheradresse selber hat meist keine weitere Adresse, aber selbst wenn,
so weis die Speicheradresse garantiert nicht, welche Zeiger auf sie verweisen.
Konnte mir irgend jemand folgen?
MFG PMV