Hi!
Na dann leg ich mal los
Code:
void fill(char ***array) // warum drei sterne vor der Variablen? Reicht nicht einer?
Sagen wir mal du möchtest ein Integer als Pointer einer Funktion übergeben. Das machst du ja so:
Code:
void fill(int *integer)
{
//(...)
}
int main(int argc, char **argv)
{
int i = 1;
//(...)
//Wir übergeben hier der Funktion fill() i als Pointer
fill(&i);
}
Die beiden anderen Sterne sind bloss da weil es sich hier um ein char*-Array handelt, also ein * für die Zeichenkette (char*) und das andere um es als Array zu kennzeichnen. Einfacher zu verstehen wäre es evtl. wenn man ein neuen Typ definiert:
Code:
typdef char** char_array;
Dann könnte man
Code:
void fill(char_array *array)
schreiben.
Code:
char **array; // warum mit zwei deklariert?
Weil es sich um ein Array von char*-Pointern handelt. Ich hätte char* array[]; schreiben sollen, aber
darauf bin ich gestern abend nicht mehr gekommen ;-).
Code:
fill(&array); // warum an der Stelle eine adresse? Geht das in Verbindung mit malloc nur so?
Weil ich fill() einen Pointer zu unserem char* array[] gebe. Das hat mit malloc überhaupt nichts zu
tun. Das ist eine ganz normale Parameterübergabe.
Code:
*array = (char**)
malloc(sizeof(char*) * 10); // das malloc ist verstanden, aber auch hier. Warum 2 Sterne beim char?
for (i = 0; i < 10; i++) // klar
{
(*array)[i] = (char*)malloc(sizeof(char) * 1024); // hier ist nur ein stern?
Es handelt sich hier um ein Array von char*-Pointern (Zeichenketten). Das erste malloc reserviert
nun Speicher für das eigentlich Array von 10 char*-Pointern (deswegen auch sizeof(char*) * 10).
Schön und gut, jetzt hätten wir ein Array von char*-Pointern, um aber damit arbeiten zu können,
müssen diese auch irgendwo draufzeigen, deshalb reservieren wir mit dem 2. malloc für jedes Feld im Array genau 1024 Zeichen (also im Prinzip 10*1024-Zeichen)
So! ich hoffe, ich habe alles richtig und halbwegs verständlich erklärt.
c ya,
Tobias
Lesezeichen