
Zitat von
PicNick
*brabbel* Eckig tut mir leid, das is eine C-Krankheit
Der Compiler hat da aber nicht gemeckert *zustimmbrabbel*
Du meinst also jedem Aray so eine Art Header mit zu speichern?
Ja das ginge schon, nur (vielleicht) wenn mal der Speicher knapp wird
(Keine Ahnung wann es soweit ist) wäre eine Solche Funktion nicht schlecht um ein paar bytes zu sparen.
PS: Ein Problem gibt es noch, habe ich aber gelöst.
Du hattest in deinem Beispiel in der Sub den Adresspointer direkt incremmentiert. Irgendwie hat sich das weitergeschlichen und eine Folgende Sub mit gleichen aber localen Variablennamen hat das mitgekriegt (Ist dann evtl. byref der Standard?).
Lieber solche Dinge explizit angeben, als dann lange suchen müssen.
Ich habe jetzt eine zusätzliche Locale Variable (Pointer) der ich dann die Basisadresse zuweise und den Index aufaddiere.
Dann braucht man byval auf jedenfall wenn man mit mehr als nur einem Parameter arbeitet. Sonst meckert der Compiler.
Warum ist das so, mit nuer einem Parameter geht's doch auch?
Für diejenigen welche es interresriert hier nochmal ein neuer Code.
'
Code:
$regfile "m32def.dat"
'
Dim Tabelle(5) As Byte
Dim W_addr As Word
Dim X As Byte
Declare Sub Array_anzeigen(wptr As Word )
Declare Sub Array_aendern(byval Wptr As Word , Byval Modifikator As Byte )
W_addr = Varptr(tabelle(1))
Print "Hauptprogramm: Schreibe Werte in Tabelle an Adresse :";
Print W_addr
For X = 1 To 5
Tabelle(x) = X * 11
Print Tabelle(x) ;
Print " ";
Next X
Print
Print
Print "Aufruf Unterprogramm mit Parameter :";
W_addr = Varptr(tabelle(1))
Print W_addr
Call Array_anzeigen(w_addr)
Call Array_aendern(w_addr , 100)
Call Array_anzeigen(w_addr)
Do
Wait 1
Loop
End 'end program
' ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
Sub Array_anzeigen(wptr As Word )
Local Bx As Byte
Local Bd As Byte
Local Pointer As Word
Print
Print "Unterprogramm Array_anzeigen"
Print "----------------------------"
Print "Übergebende Adresse = ";
Print Wptr
Print
For Bx = 0 To 4 ' einfache Schleife
Pointer = Wptr + Bx
Print "Wert an Adresse ";
Print Pointer;
Print " enthält :";
Print Inp(pointer ) ' Inhalt des Arrays anzeigen.
Next Bx
Return
End Sub
End 'end program
' ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
Sub Array_aendern(byval Wptr As Word , Byval Modifikator As Byte )
Local Bx As Byte
Local Bd As Byte
Local Pointer As Word
Print
Print "Unterprogramm Array_anzeigen"
Print "----------------------------"
Print "Übergebende Adresse = ";
Print Wptr
Print
For Bx = 0 To 4 ' einfache Schleife
Pointer = Wptr + Bx
Bd = Inp(pointer ) ' Inhalt des Arrays anzeigen.
Bd = Bd + Modifikator
Out Pointer , Bd
Next Bx
Return
End Sub
End 'end program
' ----
Lesezeichen