Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

C++

Pointer – Adressen und Zeiger

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Lernen Sie in diesem Video die Bedeutung von Pointern kennen und sehen Sie dazu einige Beispiele des Trainers.

Transkript

In C++ und C braucht man sehr häufig Pointer. Pointer heißt eigentlich Zeiger, ein Zeiger auf etwas, auf eine Speicherzelle. Das ist eingentlich auch gleich eines der größten Gefahrenstellen in C, bei der man etwas falsch machen kann, Speicher kaputt machen kann im Sinne von Überschreiben. Aber ich zeige Ihnen mal, wie das funktioniert, weil darum wird man nicht kommen, wenn man, wie gesagt, mit der Sprache arbeitet. So, es ist aber auch etwas ganz Enelgantes, kann man nämlich sehr viel machen. Wir definieren jetzt mal einen sogenannten Pointer. Oben habe ich schon mal ein paar Variable definiert, die wird dann da verwenden können. Mit Stern geht das, Stern heißt Zeiger auf... ein Integer steht davor, das heißt ein Zeiger auf einen Integer. Und jetzt muss ich einfach in Variablen Namen definieren. Man macht es gerne so, dass man da ein p vorne dran steht und i für Integer. Ich will hier ein Pointer auf einen Integer haben. Und wir können gleich nochmal einen anderen Pointer definieren - einen Pointer auf ein Character. Das ist dann eben ein entsprechendes p-Pointer auf c1 von mir aus- Pointer auf Charakter. Nun, mit den Pointern alleine kann man nichts machen, solange dann noch nichts drin steht. In die Pointer hinein speichert man Adressen. Und ich speichere jetzt mal die Adressen pi1 = &i1. Von i1 mit dem Und-Zeichen hier wird angegeben, dass ich die Adresse von i1 da einspeichern wird. Und jetzt kann ich im Prinzip auf den Inhalt zugreifen, nämlich mit *pi1 = 123, und ich kann mir den Inhalt auch natürlich direkt ausgeben. Ich kann aber jetzt, weil es ja ein Zeiger ist, den Inhalt der Variablen i1 ausgeben, denn der Zeiger zeigt auf die Variable i1. Und wenn ich den Inhalt des Zeigers verändere, verändere ich i1. Da steht jetzt 123. Und wenn ich den Pointer jetzt hier oben einfach umschalte auf i2 und mache Starte ohne Debuggen, dann hat i1 sich nicht geändert, aber entsprechend kann ich jetzt hier i2 ausgeben, Ups, nicht nochmal i1, i2, und dann müsste i2- der entsprechend geänderte Wert stehen. So, starten wir es mal! Schauen wir jetzt an, was passiert. So ist es dann 123. Pointer sind sehr prakitsch, weil man hier den Inhalt des Pointers dynamisch ändern kann über Schleifen an verschiedene Varianten zuordnen, und kann dann über die Pointer elegant drauf zugreifen so dass in einer Schleife zum Beispiel ein Pointer vorkommen, während im Programm verschiedene Datenstrukturen damit angesprochen werden können als zum Beispiel Funktionen. Deshalb braucht man das recht häufig. Können damit, wie gesagt, sehr gut arbeiten auch in Feldern, Ein solches Feld haben wir hier auch texte, unser Charakter-Feld, und das machen wir jetzt mal genauso pc1, das ist der Pointer auf unseren Charakter, den ordne jetzt diesem Textfeld zu. Das kann man zum Beispiel so schreiben. Da gibt es eher verschiedene Möglichkeiten, das erste Element des Feldes, ich hätte es aber auch einfach texte schreiben können. Das e muss natürlich hier noch ein. Das ist alternativ, weil ein Array automatischen Pointer ist, wenn ich die Klammern weglasse Das ist so eine Konvention, die man da hat. Aber schreibt man ruhig so, ich mache das ganz gerne auch. als Dokumentationsgründen ist ein bisschen übersichtlicher, und man weißt, was gemeint ist. Jetzt möchte ich natürlich diesem Pointer irgendwas zuweisen. Den Pointer selber kann ich jetzt hier zum Beispiel zu richtig gut aufpassen, was man da macht. Ich mache mal ein anderes Scrollzeichen. Und wir geben uns den Wert texte hier mal aus und schauen, was passiert, starten noch einen Debug. Ich sage gleich, warum das Ganze gefährlich ist. also ich habe hier diesen andren Scrollweg gekriegt damit. Ich kann noch was anderes machen. Ich kann hier auch Klammer auf. Jetzt machen wir "pointer arithmetic", nennt man das, +2 schreiben, und damit wir mal hier sehen, was da passiert im Text, ich ersetze nämlich jetzt hier eigentlich den Text, der hier oben steht, wenn man es genau nimmt, und da habe ich dieses Sternchen reingesetzt, und es gibt noch eine andere Schreibweise, die man auch noch machen kann, ist nämlich hier in eckigen Klammern, wie bei einem Feld kann ich zugreifen, und Pointer eher sozusagen äquivalent dafür sind 4. Da muss ich hier schon wahrsinnig schon aufpassen. Fragen Sie mal "Warum?" Das ist ganz einfach. Ich kann nämlich hier jede Menge kaputt machen, wenn ich jetzt hier ein Feldelement angebe, was es gar nicht gibt. Dann bekomme ich hier, wenn ich Glück habe, im Debugmode noch eine Fehlermeldung, aber im Programm später nicht. Ich habe hier jetzt auch das Zeichen einfach ausgetauscht. Das ist die Farbe der Geschichte. Ich greife auf dem Pointer hier, auf das erste h zu, aber es ist nicht definiert, wie das Ganze aufhören soll. Ich kann hier etwas falsch berechnen, und dann lande ich in Warne sinnes Wortes Das Charakter-Feld ist auch genauso groß jetzt wie diese Zeichenkette. Ich könnte jetzt auch nichts ergänzen. Ich könnte natürlich ein großeres Feld zuordnen und das dann reinkopieren, und dann kann ich manipulieren, aber hier muss man wahrsinnig aufpassen, dass man hier keine fehlerhaften Speicherzugriffe, Schutzverletzungen bekommt - memory exception oder ähnliches Schlimmes. Also, ein bisschen aufpassen bei der pointer arithimetic. Das ist sonsten aber eine ganz praktische Geschichte, aber wie gesagt langsam Vorgehen sorgt für dich Kontrollieren, dann funktioniert es auch, übrigens wird auch dieser Pointer i+1 hier oben funktionieren. Der Pointer zeigt zwar auf eine physikalische Adresse, in Byte sozusagen, aber er rechnet hierautomatisch, wenn ich hier Feld zugriffe oder Klammer auf +1, gibt das Ganze in die Einheit, um die hier vorne verwendet würde beziehungsweise hier bei der Dekleration des Pointers das 4 Bytes und rechnet das automatisch, um es ist also nicht ganz so maschinennah, wie man das befürchtet.

C++

Machen Sie sich mit den einfachen Grundlagen zu C++ vertraut und lernen Sie anhand zahlreicher Übungs- und Codebeispiele die Klassenkonzepte, Prozeduren und Funktionen kennen.

9 Std. 3 min (143 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Video-Training auf DVD mit Bonusmagazin

+ Tutorial to go: Mit Videos für iPod, iPhone & Co.

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!