Funktion, die Matrixkopie erstellt



  • Hallo Leute. Ich habe folgende Aufgabe: Schreiben Sie eine C-Funktion, die eine 5x5 Matrix übergeben bekommt und eine Kopie dieser
    Matrix an einen Ausgabeparameter übergibt. Welche Typdeklarationen sind hier notwendig?

    Ich habe mir folgenden Code überlegt

    long matrixkopie(long a[5][5]) {
    
    long b[5][5];           
    
    int i,j;
    
      for (i=0; i<=4; i++) {            
          for (j=0; j<=4; j++) {        
              a[i][j]=b[i][j];
              }     
          }
      }
    return b;                      
    }
    

    Also jedes a wird zum b. Allerdings meckert er bei Zeile 13 syntax error. was ist da falsch?

    Gruß, Micha



  • Du gibst einen long[5][5] zurück, der Compiler erwartet aber den Typ long.
    Beide Typen sind nicht kompatibel, der Compiler hat recht indem er dir dies anzeigt.



  • taka99 schrieb:

    Hallo Leute. Ich habe folgende Aufgabe: Schreiben Sie eine C-Funktion, die eine 5x5 Matrix übergeben bekommt und eine Kopie dieser
    Matrix an einen Ausgabeparameter übergibt. Welche Typdeklarationen sind hier notwendig?

    Ich habe mir folgenden Code überlegt
    ...

    Wenn du eine universelle Kopierfunktion haben möchtest:

    long a[5][5] = {0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4}
            ,b[5][5];
    memcpy ( b, a, sizeof ( a ));
    


  • oh letzteres ist natürlich am cleversten, aber so sollen wir es noch nicht machen.
    ich komm mit diesen blöden typen noch nicht klar, dabei ists bestimmt nicht schwer.
    welchen datentyp darf (muss) denn ein 2dimensionaler array haben? ich mein es handelt sich ja nicht um eine ganze zahl und eine fließkommazahl auch nicht.

    ich geb ein long[5][5] zurück, also dann ist es doch okay wenn fkt typ auch long ist?? raff das nicht



  • So einen Typen kann man in C nicht zurück geben, jedenfalls nicht das ich wüßte.
    Du kannst das Array in eine Struktur packen und dann die Struktur zurückgeben.
    Oder eine ganz simple Kopierfunktion ohne Rückgabetyp schreiben:

    void copy_array ( long dst[5][5], long src[5][5] );
    


  • Ein long kann nur einen Wert aufnehmen und nicht 25.

    Ein Array kann man nicht per Returnwert aus einer Funktion zurück geben.
    Ein Array kann man auch nicht als Kopie an eine Funktion übergeben.

    Schau dir doch mal an wie memcpy oder strcpy arbeiten.



  • CJosef schrieb:

    Oder eine ganz simple Kopierfunktion ohne Rückgabetyp schreiben:

    void copy_array ( long dst[5][5], long src[5][5] );
    

    Schau dir mal an, welchen Wert strcpy oder memcpy zurückgeben.
    Den Wert kann man durchaus sinnvoller nutzen.



  • Ja, man kann den Rückgabewert als Parameter an eine Funktion übergeben.


Anmelden zum Antworten