Zeiger und Referenzen wozu?
lima-city → Forum → Programmiersprachen → C/C++ und D
anfang
anzeigen
beispiel
bild
code
dank
funktion
gewicht
image
kopie
laden
lernen
objekt
problem
programmieren
referenz
ressource
speichern
stelle
zeiger
-
hallo lima,
Ich schau mir schon länger C++ an. Aber ich verstehe ums Verrecken nicht wozu die Zeiger und Referenzen da sind. Hab schon viele Tutorials angeschaut und da wird immer nur gesagt "Zeiger sind mächtig, bla bla...." aber wozu ich es brauche erkärt keiner.
Könnte mir das jemand auf gut Deutsch erkären?
gruß
chrasch -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ein Zeiger ...bei funktionen z.B.: übergibt lediglich die Stelle an dem der Variablen Inhalt, Bitmap oder ähnliches im Speicher liegt...
...hab schon lange nicht mehr mit zeigern gearbeitet aber der zeiger greift ja direkt auf den RAM zu..und schreibt da rein ...und da kann man halt auch böse sachen oder viel falsch machen^^
...mit zeigern arbeiten war nie meine Stärke^^
in C++ benutzt man das ja auch bei der dynamischen Speicher Reservierung...da kann man dann auch ganz leicht den speicher zu "müllen"^^
Beitrag geändert: 18.9.2008 14:10:07 von myhead -
AAAAAAlso...
Nehmen wir mal an, du willst ein Bild anzeigen(egal, wie). Nur, dass du es 200 mal anzeigen willst.
Jetzt könntest du natürlich einfach 200 das Bild laden.
Oder, du nimmst nen zeiger. Dann musst du das Bild eben nur einmal laden und kannst es dann weitergeben.
(das Beispiel ist ein bisschen doof, da es eher auf Spieleprogrammierung bezogen ist :/)
Ok, du hast die Klasse Image und Sprite(mit Rotation, Position, etc. des Bildes).
(Sorry, falls die Beispiele falsch sind, mein c/c++ ist ein bisschen eingerostet :])
Ohne Zeiger:
<? Sprite[200] sprites; for(int i = 0; i < 200; i++) sprites[i]("bild.jpg");
Klar ist, dass hier 200 mal ein und dasselbe Bild geladen wird.
mit Zeigern:
Image *img = new Image("bild.jpg"); Sprite[200] sprites; for(int i = 0; i < 200; i++) sprites[i](img);
Jetzt wird es nur einmal geladen und sämtliche Sprites benutzen ein und denselben Speicherbereich für ihr Bild.
Hoffe, das war verständlich und richtig ^_^ -
Also ich hab das damals so gelernt, dass bei der Variante OHNE Zeiger jedes Mal eine Kopie im Speicher angelegt wird, bei der Variante MIT Zeiger immer auf den gleichen Adressbereich des Speichers zugegriffen wird, was natürlich im Regelfall etwas geschickter ist.
-
Genau solche Erklärungen müssten in den ganzen Tutorials stehen.
Jetzt kann ich mir wenigstens überhaupt vorstellen wozu Zeiger gut sind.
Danke!
gruß
chrasch -
Eine Referenz ist eine Art Link auf einen gewissen Speicher.
Das ganze wird beispielsweise bei "Call By reference" genutzt.
Man nehme an, man hätte ein riesiges Objekt. Dieses möchte man nun in einer Funktion abarbeiten. Gibt man nun dieses objekt direkt weiter, wird mindetens einmal - beim zurückgeben - eine Kopie erstellt. Das frisst speicher und Leistung.
Also gibt man einfach die Adresse auf das Objekt zurück und schon hat man dieses problem nicht mehr. =) -
an deiner Stelle würde ich mal auf der folgenden Seite nachsehen:
http://www.galileocomputing.de/openbook/c_von_a_bis_z/
Das Buch ist meiner Meinung nach sehr gut, leider ist C++ noch nicht enhalten. Außerdem gibt es für Leute die GANZ am Anfang sind wohl bessere Bücher, da schon ein bischen Vorwissen verlangt wird.
MFG nachrichten -
Danke für den Link.
Dann stelle ich gleich noch eine Frage.
Findet ihr dass man zuerst C lernen sollte und dann C++ oder kann man gleich mit C++ anfangen?
Ich habe mit PHP angefangen und dann mich ein wenig in C++ eingearbeitet.
gruß
chrasch -
Ich hatte zumidenst keine probleme mit dem Direkeinstieg in C++-
Ob es dir so liegt musst allerdings du entscheiden.^^
Im Endeffekt sind die beiden Sprachen sehr ähnlich. -
Ich habe, wie schon erwähnt, mit C++ eingestiegen. Ich habe aber in manchen Tutorials gelesen dass man die C-Befehle wie "printf()" zum Beispiel auch in C++ einsetzen sollte da diese wesentlich Ressoucen sparender sind.
Amsonsten komme ich mit C++ komme ich gut zurecht.
gruß
chrasch
-
Kommt glaube ich auch drauf an, was du machen willst.
Ressourcen sparen ist eher dann notwendig, wenn du wirklich sehr beschränkte Ressourcen hast (embedded systems). Für den "normalen" Gebrauch sollte das nicht ins Gewicht fallen.
Direkt in C++ einzusteigen erfordert eben auch meist viel zusätliches Wissen über die Objektorientierte Programmierung. Wenn du das aber von Anfang an einsetzt wirst du wahrscheinlich eher nicht in das Problem laufen, dass du das bekannte "Programmieren mit Klassen" verwendest. (eigentlich eine "Zwischenversion" zwischen C und C++, die nicht unbedingt schlecht sein muß, aber eben den objektorientierten Ansatz von C++ nicht wirklich nutzt).
Greetz,
K.
Beitrag geändert: 25.9.2008 8:54:10 von knappenkapelle -
Mit Zeigern kann man auch schön rekursiv und speichersparend programmieren.
-
Mit Zeigern kann man auch schön rekursiv und speichersparend programmieren.
Ja, das geht gut, nur leider sind Zeiger nicht so einfach wie Referenzen, und bei Fehlbenutzung kann mann damit auch ganzschön den Speicher zumüllen;)
Aber den Umgang damit zu lernen ist durchaus sinnvoll.
Gruß,
Prog
-
Kleine funktionen sollte man eh inline deklarieren ansonsten fällt es auch bei wenigen Parametern nicht ins Gewicht, wenn man keine Zeiger verwendet. Zeiger sind häufig praktisch bei dynamischer Speicherplatzbeschaffung:
int* bla = new int[anz];
(Obwohl man das eigentlich mit einem vector machen sollte :))
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage