Kleine Frage zu Array als Procedure-Parameter

Anfängerfragen zum Programmieren mit PureBasic.
K.Putt
Beiträge: 122
Registriert: 01.09.2006 00:17

Kleine Frage zu Array als Procedure-Parameter

Beitrag von K.Putt »

Hallo,
ich nutze Arrays und habe nur eine kleine Verständnisfrage,
da ich sehr ungern globale Variablen oder Arrays bilde.

Folgendes Beispiel funktioniert ausgezeichnet, ich kann ein Array an andere Proceduren übergeben.
Gehe ich Recht in der Annahme, daß es sich fast wie eine Variable verhält - mit dem einzigen Unterschied, daß ich das Array auch ohne ProcedureReturn verändere?
Meine Frage dazu, warum funktioniert das so, eine Variable könnte ich auf diese Weise nicht einfach ändern.
Zweite Frage, gibt es irgendetwas wichtiges, daß ich dabei noch beachten sollte, außer, daß sich das 'Original-Array' bei Übergabe immer mitändert?

Danke vielmals!

Code: Alles auswählen

  
  Procedure PrintArray(Array myA1.s(1)) 
    For i = 0 To 2
      Debug myA1(i)
    Next i
  EndProcedure
  
  Procedure FillArray(Array myA2.s(1))
    myA2(0)="das"
    myA2(1)="funktioniert"
    myA2(2)="super"
  EndProcedure
  
  Procedure Main()
    Dim myArray.s(2)
    FillArray(myArray()) 
    PrintArray(myArray()) 
    ;Test noch einmal hier:
    For i = 0 To 2
      Debug myArray(i)
    Next i
  EndProcedure
  
  Main()
Zuletzt geändert von K.Putt am 07.09.2009 06:17, insgesamt 1-mal geändert.
PB 5.x & Win 7 64Bit
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Array wird ByReference übergeben, was bedeutet es wird ein Pointer zum
Orginal Array übergeben, somit auch die Orginalwerte verändert.

Prinzipiell ist es dasselbe, was man vorher immer per Pointer lösen mußte,
nur die Syntax ist jetzt etwas freundlicher und der Compiler kann besser
auf Fehler reagieren.

Hoffe mal das reicht als Erklärung,

gruß

Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
K.Putt
Beiträge: 122
Registriert: 01.09.2006 00:17

Beitrag von K.Putt »

Ausgezeichnet, danke Dir.
Ja, das ist wirklich einfach so - mit Pointern hatte ich das noch nie gemacht.
PB 5.x & Win 7 64Bit
Antworten