milos Geschrieben 20. Juni 2002 Teilen Geschrieben 20. Juni 2002 Hallo, an sich finde ich C bisher ganz OK, nur jetzt sind die Zeiger dran und ich krieg es nicht so richtig in die Birne rein... Kennt eine evtl. einen guten Text wo es sehr gut auch für Anfänger erklärt wird evtl. mit Bildchen usw... ??? Oder hat eine irgendwelche Tipps Tricks dazu ??? wäre wirklich super... Gruß Milos Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Alrik Fassbauer Geschrieben 21. Juni 2002 Teilen Geschrieben 21. Juni 2002 Auch Informatik-Studenten belegen - so habe ich es zumindest gehört - zum Teil mehrere Monate mit diesem Thema. Zusammengefasst sind Zeiger Zeiger auf Speicherstellen -> also direkt, ohne Umwege, in denen etwas steht bzw. in die geschrieben bzw. aus denen ausgelesen werden kann. Weil es so direkt ist, muß man auch entsprechend vorsichtig sein, und den Zeiger unbedingt wieder löschen bzw. außer Kraft setzen, wenn er nicht mehr gebraucht wird. Ich habe einmal durch einen Zeiger mein Win98-System inklusive Registrierung zum Absturz begracht... Seitdem programmiere ich lieber (in) Java. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Flori Geschrieben 21. Juni 2002 Teilen Geschrieben 21. Juni 2002 Hallo, mir gehts ähnlich wie dem Thread-Eröffner hier : beschäftige mich gerade auch intensiv mit den Zeigern in C. Ich sage mal, verstanden WIE sie arbeiten hab ich soweit schon, nur WIESO sie eingesetzt werden müssen, verstehe ich noch nicht. Zumindest nicht an den Beispielen in meinem bisherigen Übungsbuch "Jetzt lerne ich C" (MuT-Verlag). Vielleicht kann mir das hier jemand näherbringen, WARUM hier Zeiger verwendet werden ?!?! In dem folgenden Programm werden die Werte zweier short-Variablen mit Hilfe von Zeigern vertauscht : #include <stdio.h> void tausch(short*, short*); void main() { short *Zeiger1; short *Zeiger2; short Wert1 = 1111; short Wert2 = 2222; Zeiger1 = &Wert1; Zeiger2 = &Wert2; tausch(Zeiger1, Zeiger2); printf("Der Wert von Wert1: %d\n",Wert1); printf("Der Wert von Wert2: %d\n",Wert2); } void tausch(short *WertZeiger1, short *WertZeiger2) { short h; h = *WertZeiger1; *WertZeiger1 = *WertZeiger2; *WertZeiger2 = h; } Soweit so gut, funktioniert auch ! Ich bin aber noch immer nicht überzeugt, WARUM ich hier Zeiger verwenden soll, wenn doch das nun folgende von der Ausführung her dasselbe Ergebnis bringt !!! #include <stdio.h> void main() { short Wert1 = 1111; short Wert2 = 2222; short h; h = Wert1; Wert1 = Wert2; Wert2 = h; printf("Der Wert von Wert1: %d\n",Wert1); printf("Der Wert von Wert2: %d\n",Wert2); } Welchen Unterschied gibt es nun zwischen den beiden Varianten - beide sind doch richtig oder ?! Gibt es dann für die CPU irgendeinen Vorteil bei dem Tausch oder wieso Zeiger ?! Denke ja mal, daß die Verwendung von Zeigern den Vorteil in einer nicht sichtbaren Ebene bringt, wenn überhaupt ! Denn wie gesagt bei der Ausführung wird dasselbe angezeigt : die Werte der Variablen Wert1 und Wert2 werden wie gewünscht vertauscht. Wäre super, wenn sich jemand die Mühe machen würde und mir (oder uns) näher bringen könnte oder ne Adresse weiß, wo die Notwendigkeit von Zeigern allgemein nochmal einsehbar erklärt wird. Danke vorab ! Grüße Flori Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Woodstock Geschrieben 21. Juni 2002 Teilen Geschrieben 21. Juni 2002 Also, in dem Beispiel bräuchtest Du keine Zeiger. Allerdings werden in dem Beispiel mit den Zeigern nicht die Werte in den anderen Zeiger geschrieben. In einen Zeiger kann man nichts schreiben. Man weißt ihm eine Adresse zu, auf die er zeigt. In dem Beispiel mit den Zeigern sie das dann so aus: Vorher: Variable 1 hat Wert 2 und Adresse ??? Variable 2 hat Wert 4 und Adresse !!! Zeiger a zeigt auf ??? Zeiger b Zeigt auf !!! Nach dem Tausch: Variable 1 hat Wert 2 und Adresse ??? Variable 2 hat Wert 4 und Adresse !!! Zeiger a zeigt auf !!! Zeiger b zeigt auf ??? In dem andern Beispiel was Du angebracht hast, sieht es so aus: Variable 1 hat Wert 2 und Adresse ??? Variable 2 hat Wert 4 und Adresse !!! Zeiger a zeigt auf ??? Zeiger b Zeigt auf !!! Nach dem Tausch: Variable 1 hat Wert 4 und Adresse ??? Variable 2 hat Wert 2 und Adresse !!! Zeiger a zeigt auf !!! Zeiger b zeigt auf ??? Es funktioniert beides, ist aber doch etwas anderes. Wenn Du anfängst und dynamisch programmierst, also nur den Speicherplatz belegst den Du wirklich brauchst, dann kommst Du ohne Zeiger nicht aus. Bine Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Orffi Geschrieben 21. Juni 2002 Teilen Geschrieben 21. Juni 2002 void main () ist kein C, gewöhn es Dir gar nicht erst an. Der Unterschied zwischen Deinen Programmen ist, daß die Variablen einmal an Ort und Stelle vertauscht werden und einmal in einer Funktion. Es ist ja ganz praktisch, eine Funktion zu haben, wenn man öfter das Gleiche (zum Beispiel zwei Werte vertauschen) machen möchte. Wenn Du nun Dein Programm folgendermaßen umschreiben würdest, dann hättest Du nicht mehr den gewünschten Effekt: #include <stdio.h> void tausch ( short, short ); int main() { short Wert1 = 1111; short Wert2 = 2222; tausch (Wert1, Wert2 ); printf("Der Wert von Wert1: %d\n",Wert1); printf("Der Wert von Wert2: %d\n",Wert2); return 0; } void tausch (short W1, short W2) { short h = W2; W2 = W1; W1 = h; } Was hast Du mit diesem Programm erreicht? Nicht viel, denn Du hast die lokalen Kopien vertauscht, aber nicht die Werte in der main-Funktion. Um das zu erreichen brauchst Du Zeiger. (siehe Dein erstes Beispiel) Mit Zeigern kannst Du nun die Adresse Deiner Variablen übergeben und so die Variablen direkt manipulieren. HTH Jan Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Flori Geschrieben 21. Juni 2002 Teilen Geschrieben 21. Juni 2002 Danke schon mal bis hierhin ! Hab schon mal wieder ein paar Seiten gelesen und dort auch noch ein paar einleuchtendere Beispiele für die Verwendung von Zeigern gefunden (z.B. Zeichenketten) und es zumindest schon mal in einigen Übungen intuitiv verwenden können. Auf alle Fälle haben mir die beiden Ausführungen auch dabei geholfen, das ganze besser gedanklich umsetzen können ! Thx! Flori Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
gajUli Geschrieben 22. Juni 2002 Teilen Geschrieben 22. Juni 2002 Folgende Kurzdefinition schreibe ich meinen Schuelis manchmal an die Tafel und trage ihnen auf, ganz fest dran zu glauben und auswendig zu lernen: Ein Zeiger p auf Typ typ (typ* p) ist eine Variable (des Typs typ*), von der angenommen wird, dass ihr Wert eine Adresse enthaelt, an der man einen Wert des Typs typ findet. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
hoagi Geschrieben 22. Juni 2002 Teilen Geschrieben 22. Juni 2002 Original geschrieben von Alrik Fassbauer Ich habe einmal durch einen Zeiger mein Win98-System inklusive Registrierung zum Absturz begracht... Seitdem programmiere ich lieber (in) Java. Wenn mit nem einfachen Zeiger das Betriebsystem zum Absturz bringst , dann wechsele lieber das Betriebssystem als die Programmiersprache. ( Sorry OFF-TOpic , konnte ich mir aber nicht verkneipfen ) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
gajUli Geschrieben 22. Juni 2002 Teilen Geschrieben 22. Juni 2002 Es ist nur so, wenn er mit einem Zeiger das OS himmelt, hat er so der so ein Problem. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Alrik Fassbauer Geschrieben 22. Juni 2002 Teilen Geschrieben 22. Juni 2002 *seufz* Es war ein Zeiger, der auf ein Datenbankobjekt deutete. Wie ich später herausbekommen habe, wurde das Objekt an einer Stelle bei der Übergabe von Werten daraus nicht richtig geschlossen. Naja, ich war damals Anfänger, und mußte mich fast ganz alleine durch das Programm quälen, mit Gruppenarbeit war da nicht viel. Ich habe daraus gelernt (für mich persönlich) Zeigern aus dem Weg zu gehen, wo es nur geht. Ich wette, da gibt es jetzt viel an meinem Programmierstil zu kritisieren... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
gajUli Geschrieben 22. Juni 2002 Teilen Geschrieben 22. Juni 2002 Original geschrieben von Alrik Fassbauer Ich habe daraus gelernt (für mich persönlich) Zeigern aus dem Weg zu gehen, wo es nur geht. Ich wette, da gibt es jetzt viel an meinem Programmierstil zu kritisieren... Ganz alte Weisheit: Benutze Referenzen, wenn Du kannst und Zeiger, wenn Du musst. Wann muss man denn? - Strings, dynamische Objekte, Arrays, Dateizugriffe... Welcher C/C++-Programmierer koennte darauf verzichten? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Crush Geschrieben 22. Juni 2002 Teilen Geschrieben 22. Juni 2002 Eine Grundregel besagt: Verwende Referenzen wenn möglich und Zeiger nur wenn nötig. Da steckt schon ein Hinweis auf die Problematik drin, aber es gibt eben Anwendungsfälle, die ohne Zeiger schwierig, langsam oder gar unmöglich zu realisieren sind. (habe grad gesehen, daß Gaius jUlius zeitgleich denselben Gedanken hatte) Trotzdem ist es sinnvoll die Technik zu beherrschen anstatt sich von ihr abzuwenden, weil es "gefährlich" ist. Man kann Programme auch ohne Zeiger abschießen. Selbst manche scheinbar simple Funktionsaufrufe können Exceptions auslösen bis zum Abwinken und Speicherlücken erzeugen, daß es nur so kracht. Sobald irgendwo irgendwas manipuliert wird, geht man schon Gefahren ein. Jegliche Schreibzugriffe aller Art stellen immer eine mögliche Absturzquelle dar, aber ohne solche Funktionen und Programmteile könnte man ja gar nichts mehr auf die Beine stellen. Man muß sich damit auseinandersetzen und versuchen die Problematik zu begreifen, erfassen, in den Griff zu bekommen und zukünftig zu kontrollieren. Ich jedenfalls verwende sooft Zeiger, daß ich mir erst gar nicht vorstellen kann ohne sie zu arbeiten. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Alrik Fassbauer Geschrieben 24. Juni 2002 Teilen Geschrieben 24. Juni 2002 Ich werds mir merken. Danke. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
LoCal Geschrieben 1. Juli 2002 Teilen Geschrieben 1. Juli 2002 Original geschrieben von Alrik Fassbauer Auch Informatik-Studenten belegen - so habe ich es zumindest gehört - zum Teil mehrere Monate mit diesem Thema. ??? Also wir hatten nur eine Vorlesung für Zeiger... also 45 minuten.... den rest sollten wir uns selbst erklären. Das war aber nicht der Grund warum ich abgebrochen hab. C war die geilste Vorlesung überhaupt Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MarcG Geschrieben 1. Juli 2002 Teilen Geschrieben 1. Juli 2002 Original geschrieben von Flori Ich sage mal, verstanden WIE sie arbeiten hab ich soweit schon, nur WIESO sie eingesetzt werden müssen, verstehe ich noch nicht. warum man sie einsetzen muss...naja müssen tu tman eigentlich nur wenn z.B. in der WinAPI (oder anderen DLLs o.ä.) der Programmierer Zeiger haben wollte. Zeiger haben dann einen großen Vorteil, wenn du große Strukturen verwendest. Z.B. große Structs (um bei C zu bleiben) und diese an verschiedene Funktionen übergibst. Ohne Zeiger wird jedesmal eine Kopie angelegt, mit der Zeit für das Kopieren und dem mehrfachen Speicherverbrauch. Auch beim Programmieren mit Komponenten machen Zeiger manchmal einen Sinn. Ich hatte es schon öfter, dass mehrere Komponente eigentlich gleich sind nur andere Werte bzw. auf eine andere Art darstellten (z.B. Chart-Komponente, bei der für jede Art (torte, Balken etc.) eine neue Komponente genutzt wurde) du programmierst einmal, und übergibst die Komponente als Zeiger auf die eigentliche Komponente...spart viel Arbeit und funktioniert genauso. Pointer sind ganz hilfreich und nicht so kompliziert wie sie (gerade in C, ich sag nur Zeiger auf Zeiger ...) öfters benutzt werden Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Crush Geschrieben 1. Juli 2002 Teilen Geschrieben 1. Juli 2002 Ich bin heute etwas faul, deshalb verweise ich auf ein paar alte Threads, in denen ich mal versucht habe (mehr oder weniger korrekt) Zeiger und Referenzen zu erklären (wiederholt sich eh alles ständig von vorne). !!!Aber Vorsicht!!! Meine Sicht auf Referenzen ist nur deklarativ aus technischem Verständnis heraus erklärt und nicht ganz realistisch - dafür aber verständlich, jedoch überhaupt nicht im Sinne der C/C++-Entwickler. Simpel Komplizierter Syntaxproblematik Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.