Wozu braucht man Pointer auf Pointer und Pointer auf Funktionen in C
-
Hi,...
bin absoluter Neuling in C und C ist auch meine erste Programmiersprache!
Dazu brauch ich ein bißchen Nachhilfe im Verständnis (siehe Frage im Header)
Könntet ihr mir vielleicht einen einfachen Quelltext als Beispiel zeigen, an dem man die Notwendigkeit dieser Sachen sieht!
Vielen vielen Dank für eure Mühe.
-
Ok für das erste kann ich dir direkt ein Beispiel zeigen:
char *text; text = malloc(1); //reserviert dynamisch Speicherplatz *text = 0; //Stringendekennzeichen setzen appendtext(&text, strlen(text), "Das"); appendtext(&text, strlen(text), " ist"); appendtext(&text, strlen(text), " ein"); appendtext(&text, strlen(text), " Beispiel."); ... //hängt an text anhang an und reserviert für text vorher genügend Speicher void appendtext(char **text, unsigned len, const char *anhang) { *text = realloc(*text, len + strlen(anhang) + 1); //reserviert dynamisch Speicherplatz ohne den Inhalt zu verwerfen strcat(*text, anhang); //hängt anhang an text an }
Für das zweite wäre z. B. ein Ereignis-Timer ein gutes Beispiel. Du hast z. B. eine Funktion, die während einer Schleife ständig aufgerufen wird. Dieser Funktion (timer()) wird z. B. ein Array übergeben, deren Elemente eine Struktur sind. Diese Struktur besteht aus einem Timeout (z. B. Anzahl Sekunden) und einem Zeiger auf eine Funktion. Die Timerfunktion setzt jede Sekunde die Timeouts der Elemente um 1 herunter. Wenn einer dieser Timeouts bei 0 ist, dann wird die Funktion aufgerufen, auf die der zugehörige Zeiger zeigt. Ich hoffe du hast das jetzt einigermaßen verstanden. Wenn nicht, kann ich ja mal versuchen das ganze in Code umzusetzen.
[EDIT]V 0.2 vorgeschlagene Änderung von Shade eingearbeitet und eine vergessene Klammer eingefügt. :D[/EDIT]
-
ersetze bitte sizeof durch strlen
und füge im realloc noch ein +1 ein...
-
@Shade
Ok ist wahrscheinlich verständlicher, schöner und sicherer. Mach ich also gleich mal...
-
Ein vllt. viel öfters auftretender Fall für Pointer auf Pointer ist ein 2D-Array.
Nehmen wir an du hast eine Liste aus Wörtern, so benötigst du ein 2DArray, da
das Array aus mehreren Wörtern besteht und diese wiederum aus einzelnen Zeichen.
Dieses Array sieht so aus char strings[3][3]; . Wenn wir nun in dieser
Liste etwas suchen wollen, so können wir diese Liste an unsere Funktion char suche (char **strings, char *suchwort);**
übergeben und diese durchsucht die Tabelle. Um ihr ein 2D-Array übergeben zu können,
benötigen wir einen Zeiger auf einen Zeiger, um einmal die Position des Wortes
anzugeben und die Position auf das erste Zeichen dieses Wortes.Hoffe es ist einigermaßen verständlich.