Ich hab da so ein kleines Problem, kenn mich aber leider nicht so gut in C aus.
Ich habe eine Array s[7][6][2], daß ein Spielfeld darstellt.
Jetzt möchte ich zwei Funktionen schreiben, einmal „spielfeldausdrucken“ und „spielfeldloeschen“.
Wenn ich jetzt die variable an spielfeldausdrucken uebergebe, so funktioniert das auch ganz gut, Aenderungen an der Variable innerhalb der Funktion wirken sich nur innerhalb der Funktion aus, im Hauptprogramm bleibt die Variable erhalten.
In der Funktion „spielfeldloeschen“ möchte ich nun aber gerade veränderungen durchführen, die dann auch beim verlassen der Funktion resistent bleiben.
In Pascal geht das mit
procedur (x:integer, y:integer)
Veränderungen bleiben nicht resistent
procedur (var x:integer, var y:integer)
Veränderungen an x u. y bleiben nach verlassen der Procedur resistent:
Das Problem ist vielleicht, daß ich ein Array habe, das a) übergeben werden muß und b) auf das referenziert werden muß.
In der Funktion „spielfeldloeschen“
möchte ich nun aber gerade veränderungen
durchführen, die dann auch beim verlassen
der Funktion resistent bleiben.
In Pascal geht das mit
procedur (x:integer, y:integer)
Veränderungen bleiben nicht resistent
procedur (var x:integer, var y:integer)
Veränderungen an x u. y bleiben nach
verlassen der Procedur resistent:
Hi
Was du in Pascal durch den Zusatz var erreichst, erreichst du in C++ (ich nehme also an, dass es in C auch so aussieht), indem du statt procedure (int x, int y)
schreibst procedure(int &x, int &y)
durch das & - Zeichen referenzierst du also eine Variable.
Also einfach einen Zeiger übergeben (ich glaub, &x ist jetzt ein zeiger, bin mir aber nicht sicher) und dann den wert des zeigers verwenden
die andere möglichkeit ist es, eine globale variable für das feld zu verwenden, dann brauchst du den array garnicht als Parameter übergeben
Ich moechte dir jetzt nich komisch kommen, aber nimm keine globalen Variablen!! Sowas is nich grad das beste Programmieren! Und wenn du das ganze mit Zeigern machst (evtl noch mit allocieren) dann machst du das Programm auch nachher fuer Aenderungen einfacher!
Du kannst dir auch einfach einen typ deklarieren und nachher von diesem Typ eine Pointervariable anlegen (also Zeiger) dann kanst du mit ‚malloc‘ und mit ‚free‘ diese erweitern und loeschen. Es braucht keinen Speicherplatz zusaetzlich und mit realloc kannst du diese Sache auch fuer Eventualitaeten vergroessern!
Erstmals Danke für Eure Tips. Ich bin mittlerweile auch etwas schlauer geworden:
Eine Referenz auf eine Variable (function(&x) funktioniert nur bei einfachen Typen wie int etc. Bei einem Array geht das nicht. Bei einem Array wird aber sowieso nie das Array übergeben sondern es wird immer darauf referenziert. Die Lösung wäre damit
function(s)
Änderungen innerhalb der Funktion an meinem Array bleiben auch bei verlassen der Funktion erhalten.