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