Funktion in der Funktion



  • Hallo,

    wie kann man eine Funktion in einer Funktion schreiben? Also z.B.

    ErsteFunktion () {
         int Feld[1][1];
    	Feld[0][0] = 0;
    }
    
    ZweiteFunktion () {
        ErsteFunktion ();
    }
    

    Also sodass die Werte der ErsteFunktion in der Zeitefunktion stehen und man auch darauf zugreifen kann. 🙂



  • Funktionen sind nicht für eine solche Abstraktion gedacht. Erkläre bitte was genau du erreichen möchtest.

    Du könntest das Array theoretisch static deklarieren und dessen Adresse zurückgeben. Das wäre aber in deinem Fall wahrscheinlich kein guter Weg.



  • Also sodass die Werte der ErsteFunktion in der Zeitefunktion stehen und man auch darauf zugreifen kann

    Wenn die erste Funktion das Array zurück gibt ?



  • Ich möchte in dem Beispiel hier auf das

    int Feld[1][1];
        Feld[0][0] = 0;
    

    aus ErsteFunktion() zugreifen können. In Zweitefunktion soll dann dieses Feld über Printf gedruckt werden. Nach diesem Prinzip:

    int x, y;
    
    // Schleife fuer Zeilen, Y-Achse
    for(y=0; y<3; y++) {
    	// Schleife fuer Spalten, X-Achse
    	for(x=0; x<3; x++) {
    		printf("%d ", init()[y][x]);
    					   }
    	printf("\n");
    			      }
    


  • 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 Funktion

    printf("%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 ruf printf 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 musst print() nicht "innerhalb" von printf aufrufen damit es selbst printf() 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


Anmelden zum Antworten