Funktion in der Funktion
-
Du kannst der zweiten funktion einen Zeiger auf dieses Array übergeben:
void ersteFunktion(int (*arr)[8][9]) //arr ist ein Zeiger auf ein array[8][9] { (*arr)[2][5] = 4; } void zweiteFunktion() { int fff[8][9]; ersteFunktion(&fff); }
-
Dann müsste man auf jedes Feld einen Zeiger anlegen. Das ist doch schon ziemlich umständlich, wenn man die Felder ändern möchte.
Die Aufgabenstellung sieht so aus: Implementiere eine Funktion, die eine übergebene Matrix formatiert auf dem Bildschirm ausgibt.
Und ich grüble schon ne Weile wie das funktionieren soll.
-
Ich versteh nicht was du damit meinst. Du hast ein lokales Array in der einen Funktion und übergibst einen Zeiger auf dieses an eine andere.
-
EDIT: Vielen Dank roflo. Jetzt hat es geklappt!
-
Gut
-
Überhaupt nicht gut.
Die Dreidimensionalität ist Nonsens, 2 Dimensionen reichen völlig:void ersteFunktion(int (*arr)[9])
-
Also so wie es roflo vorgeschlagen hat, passt es sehr gut.
Kurze Frage noch:
Wie verhindert man, dass wenn man die Funktionprintf("%d",funktion());
anwendet, ein return-Wert in der Konsole zurückgegeben wird? Bei mir ist es häufig nur eine Null. Auch wenn ich das return 0; weglasse.
-
Die Frage ist jetzt bitte hoffentlich nicht dein Ernst?
Wenn du nix ausgeben willst, dann rufprintf
nicht auf
-
Ne das problem ist, dass ich über printf die funtktion ausdrucken will, in der eine matrix steht. Das klappt auch nur steht am Ende (in der konsole) immer eine 0. also je nach dem was ich hinter dem return angebe. Und ich hätte gerne, dass diese 0 nicht ausgedruckt wird.
Es schaut so in etwa aus:
1 2
3 4
0 <--- gehört nicht zur matrix
-
Wird das
1 2 3 4
in der Funktion funktion ausgegeben?
Schon mal einfach
funktion();
benutzt?
Sonst zeig minimalen, vollständigen Code, der dein Ergebnis reproduziert.
-
Hier der Code:
#include <stdio.h> #include <stdlib.h> // Werte der Matrix init(int (*matrix)[2][2]) { // Zeiger der Matrix (*matrix)[0][0] = 0; // Zeile 0 Spalte 0 (*matrix)[0][1] = 1; // Zeile 0 Spalte 1 (*matrix)[1][0] = 2; // Zeile 1 Spalte 0 (*matrix)[1][1] = 3; // Zeile 1 Spalte 1 return 0; } //Print-Funktion print(){ int matrix[2][2]; // Referenzierung: Erhält Adresse von matrix init(&matrix); int i, j; // Funktionsweise: Starte in der 0. Zeile (i=0), dann zähle Spalten bis (j < MAX) und beginne eine neue Zeile (\n) // Starte in der 1. Zeile (i=1), ... // Schleife fuer Zeilen, Y-Achse for(i=0; i<2; i++) { // Schleife fuer Spalten, X-Achse for(j=0; j<2; j++) { printf("%d ", matrix[i][j]); } printf("\n"); } return 0; } // Hauptfunktion int main(int argc, char *argv[]) { // Gebe Druckfunktion (print()) aus printf("%d",print()); return 0; }
-
Der rückgabewert von print wird printf als Argument übergeben. Wo ist jetzt das Problem?
-
Das Kommentar "// Gebe Druckfunktion (print()) aus" ist völliger Blödsinn.
Du musstprint()
nicht "innerhalb" vonprintf
aufrufen damit es selbstprintf()
verwenden kann.Am Schluss wird eine "0" zu viel ausgegeben? Na rate mal was für ne "0" das ist. Das ist die 0 die von print zurückgegeben wird, und vom printf in Main rausgeschrieben.
=>int main(int argc, char *argv[]) { // Druckfunktion aufrufen print(); return 0; }
Tadaa