001
21.01.2004, 01:08 Uhr
Pablo
Supertux (Operator)
|
1. das sage ich jedem, also nicht böse sein. Die main Funktion soll int sein und nicht void!!!!
Ein Zeiger auf ein Zeiger ist dann nützlich, wenn du z.b. ein 2. dimensionales Array mit unbekannten Längen erstellen können.
C++: |
#include <stdio.h> #include <malloc.h> int main() { int** arr; int x,y, i; printf("Geben Sie die beiden Diemensionen an: (Format a,b)\n"); scanf("%d,%d", &x, &y); arr = (int**) malloc(sizeof(int*)*x); for (i=0; i<x; ++i) arr[i] = (int*) malloc(sizeof(int)*y); // speicher ist schon da
// nun alles freigeben for(i=0; i<x; ++i) free(arr[i]); free(arr); return 0; }
|
Eine zweite Möglichkeit einen Doppelpointer zu bekommen ist, wenn du ein Array bzw. Pointer bekommst und du willst die Adresse ändern.
C++: |
#include <stdio.h>
void foo(char* x) { // man kann den Inhalt der Daten auf die x zeigt ändern, die Adresse auf die x zeigt // kann nicht geändert werden. char* tmp = "Das bleibt nur hier"; printf("Zeigen x und tmp auf die selbe Adresse? 1=ja, 0=nein. Antwort=%d\n", x==tmp); x = tmp; }
int main() { char* hw = "Hello World"; foo(hw); printf("Wo zeigt nun hw? Auf '%s'\n", hw); return 0; }
|
Wenn du das ausführst, bekommst du
Code: |
Zeigen x und tmp auf die selbe Adresse? 1=ja, 0=nein. Antwort=0 Wo zeigt nun hw? Auf 'Hello World'
|
Wie du siehst, die Zeichenkette, auf die x zeigt (in foo()) kann geändert werden. Aber die Adresse, auf die x zeigt kann nur innerhalb von foo() geändert werden. Wenn foo() verlassen wird, zeigt x wieder auf die alte Adresse, deshalb bekommt man Wo zeigt nun hw? Auf 'Hello World'
Nun, guck dir das mal an:
C++: |
#include <stdio.h>
void foo(char** x) { // man kann den Inhalt der Daten auf die x zeigt ändern, die Adresse auf die x zeigt // kann nicht geändert werden. char* tmp = "Das bleibt nur hier"; printf("Zeigen x und tmp auf die selbe Adresse? 1=ja, 0=nein. Antwort=%d\n", *x==tmp); // zeiger auf zeiger. *x leifert den Inhalt des Zigers auf einen Zeiger. Also eine Adresse. *x = tmp; // den Inhalt des Zeigers auf Zeiger kann dan geändert werden }
int main() { char* hw = "Hello World"; foo(&hw); // Übergabe der Adresse der Variable hw als Variable und nicht die Adresse von "Hello World" printf("Wo zeigt nun hw? Auf '%s'\n", hw); return 0; }
|
Ergebnis
Code: |
Zeigen x und tmp auf die selbe Adresse? 1=ja, 0=nein. Antwort=0 Wo zeigt nun hw? Auf 'Das bleibt nur hier'
|
Ist das klar?
Bearbeitung von Pablo: |
Manchmal will man die Adresse eines Zeigers innerhalb einer Funktion ändern, und dann kann man das benutzen.
|
-- A! Elbereth Gilthoniel! silivren penna míriel o menel aglar elenath, Gilthoniel, A! Elbereth! Dieser Post wurde am 21.01.2004 um 01:14 Uhr von Pablo editiert. |