C, Funktionen, Übergabeparameter

Hallo C-Spezialisten,

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ß.

Danke für Eure Hilfe

Marco

Um den Inhalt des Arrays innerhalb einer Funktion ändern zu können gibt es 2 Möglichkeiten:

  1. Entweder deklarierst du das Array global, oder

  2. Du übergibts der Funktion einen Zeiger auf das Array (in C ist das für deinen Fall einfach s)

Die 2. Methode ist meist die bessere.

Falls Du nicht weisst, was ein Zeiger ist, solltes Du vielleicht in einem Buch nachschauen, das lässt sich so auf die Schnelle nicht erklären…

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

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

Cu, Reaper82

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!

Ciao! Bjoern
*deramanfangauchsoseineproblememitpointernhatte*

Danke für Lösungen
Hi,

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.

Danke für Eure Hilfe

Marco