übergabe von feldern
-
Hallo, ich soll als schulprojekt schiffeversenken in c++ programieren. im großen und ganzen funktioniert es auch. nun soll ich aber als auflage von meinem lehrer alles in funktionen aufteilen.
ich habe nun folgendes problem:
wie kann ich eine 2 dimensionales datenfeld das in einer funktion erstellt wurde an main() übergeben (und umgekehrt). ich würde mich über eine (leichtverständliche) hilfe freuen.besten dank im voraus
-
1. erstelle eine Klasse in der das Array steht und baue entsprechende Methoden für alles erdenkliche
2. erstelle das Array in Main und übergebe einen Pointer darauf in die Funktion. Alles was Du innerhalb der FUnktion veränderst ist innerhalb der Main hinterher auch geändert.
-
Oder eine dritte Möglichkeit mache das Array global und greife direkt darauf zu,
allerdings ist die Möglichkeit mit der Klasse die schönste.
-
äh... ???
könnt ihr mir das vielleicht annem beispiel erklären.
die funktion felderzeugen soll feld[][] an main übergeben un die soll dann zb die eingabe in feld[][]schreiben.int felderzeugen()
{
int feld[10][10];
........
return ???
}
-
hmm ich denke ihr habt mit klassen warscheinlich noch nicht gearbeitet!
du kannst einfach das array in main instanzieren.
dan übergibst du den pointer auf das array deiner unterfunktion. dort kannst du dann ganz normal mit dem array weiterarbeiten.
beispiel:
void test(int *); void main(void) { int aiTest[80][80]; test(aiTest); } void test(int *aiTest) { int iTemp; iTemp = aiTest[0][0]; }
hintergrund: aiTest ist eigentlich nichts anderes als ein pointer auf aiTest[0][0]
hoffe ich habe dir geholfen ...
-
auf so einen Zeiger kannst du aber nicht zweimal den [] operator anwenden.
Wenn Schiffeversenken eine fixe Größe hat, ist allerdings folgendes möglich:void foo (int a[][10]) { a[0][0] = 42; } int main () { int a[10][10]; foo(a); }
Aber das geht an der Frage des OPs vorbei, der erstellt nämlich sein Array in einer Funktion und will es zurückgeben (das geht nicht so einfach).
Entweder verpacken (class/struct) oder die Sachen, die die Standardbibliothek bietet, nehmen. (Eine weitere Alternative nenne ich jetzt lieber nicht)
-
Würd nicht auch nen Pointer auf Pointer gehen?
also void foo (int **p)
-
SirLant schrieb:
Würd nicht auch nen Pointer auf Pointer gehen?
also void foo (int **p)Jo. Oder wodurch es imho deutlicher wird:
void foo (int *p[])
Code-Hacker
-
SirLant schrieb:
Würd nicht auch nen Pointer auf Pointer gehen?
also void foo (int **p)Darauf könnte man zweimal [] machen, um den Wert zu bekommen.
Allerdings müsste man dann auf solcheint array[10][10];
definitionen verzichten (mach doch mal einen zeiger auf zeiger daraus ) und es so, wie es bereits bei den faqs steht (dynamische mehrdimensionale Array) machen.
-
warum macht ihr das alles so kompliziert ?
für die anforderung die dem fragesteller gegeben sind reicht das doch vollkommen aus was ich oben beschrieben hab.
-
ulath schrieb:
void test(int *); void main(void) { int aiTest[80][80]; test(aiTest); } void test(int *aiTest) { int iTemp; iTemp = aiTest[0][0]; }
Dann kompilier das mal
btw void main ist nicht Standard, es heißt int main.