Funktionsweise einer Funktion nachvollziehen



  • Hallo,

    ich muss die Funktion einer Funktion nachzuvollziehen, komme da aber nur schleppend weiter und wäre über ein bisschen Hilfe sehr dankbar.

    unsigned char** matrix(size_t rows, size_t columns)
    {
      size_t i;
      unsigned char **m;
      m = new unsigned char* [rows];
      *m= new unsigned char  [rows*columns];
    
      for (i=1; i<rows; i++)
        {
           m[i]=m[i-1] + columns;
        }
      return m;
    }
    

    Es wird ein Array zum hinterlegen von Bildpixeln angelegt, aber was genau passiert Zeile für Zeile 😕

    size_t i;
    

    Legt in meinem Fall eine Variable an mit 64Bit....

    unsigned char **m;
    

    Hier stelle ich mir die Frage, warum "**".... ist doch ein Pointer auf einen Pointer, oder nicht ?

    m = new unsigned char* [rows];
    *m= new unsigned char  [rows*columns];
    

    Es wird Speicherbereich reserviert und die Startadressen in m & *m hinterlegt..

    Aber irgendwie fehlt mir da gerade der Ansatz wie das vom Ablauf her funktioniert.

    Würde mich super freuen, wenn sich jemand die Zeit nehmen würde und vielleicht
    mit mir einmal Zeile für Zeile durchgehen würde, was da genau passiert.

    Bitte nicht kreuzigen 😉

    Danke schon einmal 🙂



  • Woher kommt diese Funktion? Die macht vermutlich nicht das, was der Autor sich vorgestellt hat.



  • Ist fürs Studium.

    Haben diese Funktion vorgegeben bekommen und sollen sie in unser Programm einbauen.

    Aber im Moment hapert es leider schon am nachvollziehen.

    Denkanstöße würden mir auch vollkommen reichen.



  • Beispiel für 3 rows und 2 cols, und char statt unsigned char (wg. Kürze).

    m zeigt auf 3 char*
    m[0] zeigt auf 3 * 2 char.
    m[n] zeigt auf m[n-1] + 2

    rows = 3, columns = 2;
    
    char **m    ---> char* | char* | char*
    *m (==m[0]) ---> char | char | char | char | char | char
                       0      1      2      3      4      5
                                     ^             ^
                                     |             |
    m[1] = m[0] + 2 -----------------+             | 
    m[2] = m[1] + 2 -------------------------------+
    

    Habe ich so noch nicht gesehen. Ich find's nicht schlecht.



  • Hallo Furble Wurble,
    danke für die Erklärung, damit komme ich vom Verständnis her erstmal weiter 👍



  • Ich frag mich bloss wozu m wenn m[0] doch reichen würde... 😕



  • Weil man es jetzt wie eine Matrix mit 2 Indices ansprechen kann?!


Anmelden zum Antworten