Zeiger < Algor.+Datenstr. < Theoretische Inform. < Hochschule < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 13:19 Do 21.08.2008 | Autor: | tynia |
Also meine Frage ist ganz allgemein.
Kann mir vielleicht jemand in einfachen Worten erklären, was Zeiger eigentlich machen und wozu man sie braucht? Ich versteh das irgendwie nicht richtig.
Ich weiß, dass ein Zeiger eine Variable ist, die die Adresse speichert, an der ein Objekt im Speicher steht.
Dadurch, daß dem Zeiger die Adresse bekannt ist, zeigt er quasi auf dieses Objekt, woher
auch der Name kommt.
Aber wozu denn der Zeiger? Kann man nicht direkt die Variable aufrufen?
Hoffe mir kann da jemand weiterhelfen. Danke schonmal
|
|
|
|
Nehmen wir ein Beispiel: Du arbeitest mit einem Kommilitonen an an einem Übungsblatt. Zuerst schreibst du ein paar Zeilen, danach soll dein Kommilitone weiter schreiben, dann übernimmst du den Feinschliff. Du hast nun mehrere Möglichkeiten, die Übergabe deiner bisherigen Arbeit an deinen Kommilitonen zu gestalten: Entweder du kopierst deine Arbeit und übergibst sie deinem Kommilitonen, der wenn er fertig ist seinen Teil wieder kopiert und dir zurückgibt, wo du dann alles zusammenbastelst.
Oder aber du gibst deinen Kommilitonen einfach den Zettel wo das drauf steht, was du bisher erarbeitet hast und er gibt dir nachdem er fertig ist und seinen Teil auf diesem Zettel geschrieben hat genau diesen Zettel wieder zurück.
Anstatt deinem Kommilitonen den Zettel direkt zu geben, kannst du ihn natürlich auch in ein Schließfach sperren und den Schlüssel übergeben.
Die erste Variante entspricht der Übergabe einer normalen Variablen, deren Inhalt (zumindest in C und ähnlichen Sprachen) bei Übergabe immer kopiert wird. Die dritte Variante entspricht einem Zeiger. Der Vorteil hier liegt auf der Hand: Es muss nichts kopiert werden, also spart man sich die Kopiergebühren bzw den Platz im Arbeitsspeicher bei einem Programm. Aber auch sonst hast einige Unterschiede, zum Beispiel bearbeitest dein Freund den Zettel (das Objekt) an sich und es gibt hinterher keine Arbeit beim Zusammenfügen.
Einen Nachteil kann man aber auch schon erahnen: Niemand garantiert, dass im Schließfach nacher auch wirklich immer nur ein Zettel liegt und nicht irgendetwas anderes. Viele Programmabstürze sind darauf zurückzuführen, dass jemand eine Funktion auf eine Speicherstelle verweist und sich dort völlig andere Dinge befinden, als die Funktion erwartet hatte.
In einem Programm ist ein solches Verhalten immer nützlich, wenn das Kopieren eines Objektes keinen Sinn ergibt. Stell dir zum Beispiel eine graphische Benutzeroberfläche vor, auf der ein Knopf prangt. Du möchtest nun eine Funktion schreiben, die genau diesen Knopf eine neue Beschriftung verpasst. Wenn du nun den Knopf direkt übergibst, wird C diesen Knopf kopieren und deine Funktion bearbeitet einen völlig anderen Knopf, der nirgendwo zu sehen ist. Wenn du stattdessen einen Zeiger übergibst, so kann die Funktion auf genau den einen Knopf zugreifen und seine Beschreibung verändern.
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 19:06 Fr 22.08.2008 | Autor: | tynia |
Danke Genau so eine Erklärung meinte ich
|
|
|
|