Pointer-Chaos

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

 

Ava

Gast

Betreff: Pointer-Chaos

BeitragDi, Feb 07, 2006 14:15
Antworten mit Zitat
Hallöchen,

nun nach einiger Zeit des Zögerns habe ich mich jetzt doch entschlossen, meine BMax-Module an die hinterhältigen Veränderungen der letzten Updates anzupassen, um endlich mal wieder etwas zeitgemäßer dabei zu sein.

So, gleich zu Anfang komme ich nun aber schon ins Stocken!


Bisher stand in meinem Code
    var byte_ptr = byte_value

Das wird nun in dieser Form nicht mehr akzeptiert. Kann mir jemand sagen, wie ich es nun schreiben muss??? - also ich habe einen Pointer auf eine Variable und möchte der zum Ponter zugehörigen Variable einen Wert zuweisen! Meine erste Idee war: Byte(byte_ptr) = byte_value. Klappt aber auch nicht. Confused


+ Ava +

Artemis

BeitragDi, Feb 07, 2006 14:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
byte_value = byte_pointer[0]


Original-Hilfe:
Zitat:
Array style indexing is used to dereference pointers.


Edit:
https://www.blitzforum.de/viewtopic.php?t=16189
7 Posts unter deinem.
 

Ava

Gast

BeitragDi, Feb 07, 2006 14:56
Antworten mit Zitat
Das hatte ich gelesen, aber nicht so recht verstanden.
Und ganz ehrlich gesagt, verstehe ich es auch jetzt nicht
ganz genau, wie das funktioniert. Embarassed

Könnte mir das vielleicht noch einmal jemand etwas genauer
erklären? - Dein Code-Beispiel, Jonas, verwirrt mich sehr... Confused


[edit] Auch das Thema hatte ich gelesen, konnte aber auch
damit nicht viel anfangen. Embarassed Bisher war das mit den Pointern
alles so schön einfach - das Mark das nun plötzlich so umwirft,
muss ich nicht verstehen, oder?! Sad

[eidt_2] Ein anderes Beispiel aus meinem Code:
    var byteList[index] = value
Hier habe ich meine Pointer in einem Array gespeichert
und möchte einer Variable auf die ein bestimmter Pointer aus
diesem Array zeigt, einen Wert zuweisen. Wenn ich da nun
irgendwie eine Array-Schreibweise verwenden muss, um das
mit den Pointern zu regeln, wie würde das dann in diesem Fall
aussehen?! *verzweifeltguck*

Artemis

BeitragDi, Feb 07, 2006 15:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
'Hier wird eine normale Byte-Variable erstellt
Local Byte_Value  :Byte = 12
'Hier wird ein Byte Pointer erstellt, welcher auf 'Byte_Value' zeigt
Local Byte_Pointer:Byte Ptr = Varptr Byte_Value

'Um auf den Wert der Speicherstelle (auf die ein Pointer zeigt) zuzugreifen tut ma so, als wenn der Pointer ein Array wäre, bei dem man dann auf das erste [0] Element zugreift.

'Früher: (Var Byte_Pointer) = 15
'Jetzt : Byte_Pointer[0]    = 15
Byte_Pointer[0] = 15

'Hier wird der Wert ausgegeben, der jetzt 15 beträgt
Print Byte_Value
 

Ava

Gast

BeitragDi, Feb 07, 2006 15:11
Antworten mit Zitat
Danke, Jonas! Das ist ja echt ne sehr blöde Lösung, das führt doch innerhalb des Codes total schnell zu Missverständnissen und Verwirrung. Evil or Very Mad Aber soweit habe ich das jetzt, glaube ich, verstanden. Nur wie funktioniert das dann, wenn ich, wie oben in meinem 2ten Edit, ein Pointer-Array habe ???? Confused

[/edit] Es scheint wohl so zu funktionieren:
    byte_pointer[index][0] = value
Na immerhin...

[/edit_2] Fehlanzeige, der Compiler meckert nicht, aber irgendwie führt das zu einem Programmaufhänger ohne Meldung. Tipps ?? Confused
  • Zuletzt bearbeitet von Ava am Di, Feb 07, 2006 15:46, insgesamt einmal bearbeitet

Artemis

BeitragDi, Feb 07, 2006 15:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann behandelst du das ganze wie ein Asymmetrisches Array:
Code: [AUSKLAPPEN]
Local PointerArray:Byte Ptr[2]

Local Byte1:Byte = 1
Local Byte2:Byte = 2

PointerArray[0] = Varptr Byte1
PointerArray[1] = Varptr Byte2

PointerArray[0][0] = 11
PointerArray[1][0] = 22

Print Byte1 '11
Print Byte2 '22


Also merken:
Egal wie der Pointer aussieht, um an den Wert zu kommen hängt man ein [0] dran.
 

Ava

Gast

BeitragMi, Feb 08, 2006 12:52
Antworten mit Zitat
Gibt es eine Möglichkeit, nur Teile der BMax Updates zu verwenden ?!?
Sprich: Ich möchte die Bugs raushaben, aber auf die Veränderungen sch***** Exclamation Evil or Very Mad

rema

BeitragMi, Feb 08, 2006 14:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Erstelle dir doch Hilfs-Function oder -Methode um dies abzudecken... Ist sowiso dann übersichtlicher, da du dich nicht mehr mit solchem sch... Zeug abgeben musst.
 

Ava

Gast

BeitragMi, Feb 08, 2006 14:54
Antworten mit Zitat
Ich habe aber generell grosse Probleme mit dem Update. Sad
Kann es sein, dass es dort einen Bug in der GetChar Funktion gibt?!
Und das mit den Pointern scheint mir im Update auch nicht ganz
100% fehlerfrei. Confused

Naja, jedenfalls bin ich nun erstmal wieder auf meine geliebte 1.09
zurück. Da läuft wenigstens alles problemlos. Evil or Very Mad

Der einzige Grund für mich upzudaten (mein BNet-Problem), hat
sich durch das Update auch nicht gelöst...... also püüh....

Jolinah

BeitragMi, Feb 08, 2006 16:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich fand es eigentlich mit Var auch schöner.. aber das [0] gab es schon vorher parallel zu Var. Vermutlich wurde es entfernt weil var auch noch eine andere Bedeutung hat :

Code: [AUSKLAPPEN]
'Referenz -- Zahl (a) kann direkt in der Funktion geändert werden.

Local Zahl:Int = 5
test(Zahl)
Print Zahl  '10

Function test(a:Int Var)
  a = 10
End Function
 

Ava

Gast

BeitragMi, Feb 08, 2006 16:35
Antworten mit Zitat
Joa, das weis ich ja. Smile
Ich finde es dennoch weitaus weniger konfus, den var Befehl für diese zwei unterschiedlichen Dinge zu verwenden, als die eckigen Klammern, wo es dann aussieht, als wäre es ein Array. Wink

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group