Zitat 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
' ----