Ich versteh es immer noch nicht

Hallo,

ich habe jetzt in 2 Büchern mir es zwei mal durchgelesen,dass jeweilige Kapitel über Zeiger,aber ich verstehe immer noch nicht, warum ich denn jetzt Zeiger überhaupt brauche.

In den Büchern sind Beispiele gegeben die ich auch ohne Zeiger lösen kann… aber so wird das ja nicht in der Zukunft sein bei mir :wink: Ich will ja verstehen,warum man die braucht,aber ich bin bis jetzt immer noch nicht drauf gestoßen „Ah,hier muss ich unbedingt einen haben!“

Kennt jemand eine Seite, wo darauf eingegangen wird, warum man die braucht?

Oder kann mir jemand versuchen,es zu erklären? vll an einem kurzen Beispiel?

Ich würde mich sehr freuen!

Gruß

Hallo,

In den Büchern sind Beispiele gegeben die ich auch ohne Zeiger
lösen kann…

Welche denn? Vermutlich benutzt Du Zeiger, ohne es zu merken. So ist z.B. der Zugriff auf Element i eines Arrays a a[i] das selbe wie *(a+i). In der Tat wird a[i] vom Compiler sofort in *(a+i) umgewandelt.

Kennt jemand eine Seite, wo darauf eingegangen wird, warum man
die braucht?

Vielleicht wird es Dir bei den Funktionsaufrufen klarer? C übergibt die Argumente der Funktionen „by value“, d.h. Du kannst ohne Zeiger in der aufgerufenen Funktion keine Variablen der aufrufenden Funktion ändern.

Es wird eigentlich sehr gut im Kernighan /Ritchie erklärt, im Kapitel 5, „Pointers and Arrays“.

Gruß

Fritze

also auf tutorials.at wird es so beschrieben, dass man zeiger braucht um speicher zu sparen, da die dateien mit denen man arbeitet dann nicht mehr kopiert werden müssen, sondern einfach drauf „gezeigt“ wird…

ich hoffe ich konnte dir weiterhefen

Aaron

Hallo

Pointer werden meistens verwendet, wenn man einer Funktion Daten übergeben will, die sie verändern soll. In C++ kann man dafür auch Referenzen verwenden.

typedef struct \_POINT
{
 int x, y;
} POINT;

MovePoint(int x, int y, POINT\* pt)
{
 pt-\>x += x;
 pt-\>y += y;
}

...

POINT pt = {0,0};
MovePoint(10, 20, &pt); //& liefert die Speicheraddresse einer Variable (einen Pointer darauf)
//pt ist jetzt {10, 20}

Ebenfalls sehr beliebt, wie ich es auch im obigen Beispiel gemacht habe, ist es bei sehr großen Strukturen lediglich einen Pointer auf die Struktur zu übergeben anstatt der ganze Struktur, da ein Pointer auf einem 32bit Betriebssystem nur 4 Byte groß ist.

Und wo du dann ein richtiges Pointerchaos hast, ist bei der Stringverarbeitung =)
Ein typischer c-String ist ja eigentlich ein Zeiger auf ein Array aus chars. Wenn du dir einmal die Stringfunktionen aus dem string.h ansiehst, wirst du vielleicht bemerken, das alle dieser Funktionen c-Strings erwarten (char*) und auch solche zurückgeben.

Ich würde dir empfehlen, probier einfach einmal was mit Stringverarbeitung aus. Zum Beispiel könntest du eine Tabelle in einer html seite in ein 2 dimensionales array aus strings einlesen.

Zelle11Zelle12>/td>
Zelle21Zelle22>/td>

Da brauchst du dann ein 2 dimensionales array aus pointern auf chararrays.

char tabelleneintrag[128];
... //einlesen
char\* table[2][2];
table[0][0] = (char\*) malloc(sizeof(char) \* strlen(tabelleneintrag));
strcpy(tabel[0][0], tabelleneintrag);
...

mfg dixxi

Danke für die Antworten :smile: