Pointer endlich verstanden?



  • Hallo Community,

    Wenn ich ein Pointer Pointer erstelle wie

    char **array
    

    und nun malloc darauf anwende

    array = (char **)malloc(sizeof(char)*x)
    

    Dann hab ich ja jetzt ein Pointer char Array ( *array[x]) richtig?

    Wenn ich nun array[][] haben will muss ich erneut malloc anwenden wenn ich das
    richtig verstanden habe.

    So ist es ja bei main ebenfalls wenn ich das richtig sehe, da ich
    folgende Schrebweisen verwenden kann: char **argv und char *argv[].

    Bei dem char *argv setze ich ja nur ein pointer auf den String anfang. Bei einem
    char array[10] muss ich es doch in den Bereich reinkopieren richtig?

    Ich hoffe mal das ich es verstanden habe 🙂

    Mfg.



  • c_pointer schrieb:

    Hallo Community,

    Wenn ich ein Pointer Pointer erstelle wie

    char **array
    

    und nun malloc darauf anwende

    array = (char **)malloc(sizeof(char)*x)
    

    Dann hab ich ja jetzt ein Pointer char Array ( *array[x]) richtig?

    FALSCH !

    c_pointer schrieb:

    ...

    Wenn ich nun array[][] haben will muss ich erneut malloc anwenden wenn ich das
    richtig verstanden habe.

    Auch falsch.
    🤡



  • Pointer auf Pointer...stells dir so vor:
    Der erste Pointer zeigt auf einen Speicherbereich, welcher wiederum Pointer beinhaltet.
    Diese Pointer zeigen letztlich auf die char Daten.

    Zeiger auf char-->Zeiger auf char-->char
    folglich: char
    *->char*->char**

    In C sieht das so etwa aus (ungetestet) :

    char** ppC;
        int i,j;
    
        ppC=(char**)malloc(5*sizeof(char*));//Ein Feld mit 5 char* erstellen
        for(i=0;i<5;i++)
            ppC[i]=(char*)malloc(2*sizeof(char));//Diese 5 char* zeigen wiederum auf ein Feld mit 2 char
    
        for(i=0;i<5;i++)
            for(j=0;j<2;j++)
                ppC[i][j]=i*j;//Du kannst das ganze jetzt als Array verwenden
    
    //Speicher freigeben nicht vergessen->zuerst die char Felder, dann erst das char* Feld
    

  • Mod

    Warum die vielen Casts?



  • Bei dem char **array und dem malloc mächtest du ein Array aus Zeigern auf char haben.
    Demnach muss in Array auch Platz für char-Zeiger sein.
    Also:

    array = malloc(sizeof(char*)*x); // der cast auf (char **) ist in C nicht nötig
    //                        ^ da ist der Unterschied
    

Anmelden zum Antworten