Zeiger vs. Referenz

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
gizno82
Beiträge: 46
Registriert: Sa Dez 19, 2009 4:03 pm

Zeiger vs. Referenz

Beitrag von gizno82 » Do Jul 12, 2012 3:29 pm

Hallo Leute,

Was ist eigentlich der Vorteil einer Referenz gebenüber eines Zeigers ?

Gruß Gizno

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Zeiger vs. Referenz

Beitrag von cloidnerux » Do Jul 12, 2012 3:31 pm

Hier wird das unter anderem ausführlich behandelt:
http://www.proggen.org/doku.php?id=cpp:ref:start
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: Zeiger vs. Referenz

Beitrag von fat-lobyte » Do Jul 12, 2012 3:54 pm

Um zur Verwirrung beizutragen:

Beide Konzepte sind dazu da, um gewisse Objekte im Speicher anzusprechen.

Allerdings kannst du einen Zeiger auch nach der Funktion aufteilen:
* Du hast einerseits einen "Griff" (Handle) auf deine Daten, und zwar entweder auf EIN Objekt, oder auf eine Sammlung davon.
* anderseits hast du die Möglichkeit zur "Arithmetik", wenn du einen Zeiger auf eine Sammlung betrachtest - du kannst von Element zu Element springen oder die Stelle selbst berechnen

Diese beiden Zwecke eines Zeigers sind in C untrennbar vereint.
In C++ werden diese abstrahiert und getrennt:

Für den ersten Zweck gibt es Referenzen, mit denen du zwar Zugriff auf deine Daten hast, aber keine Berechnungen durchführen kannst.
Eine Referenz kannst du in C++ nur mit einem existierenden Objekt initialisieren, nicht aber ohne (außer du machst das Mutwillig). Diese sind viel sicherer als Zeiger.

In wirklichkeit verbirgt sich hinter jeder Referenz ein Zeiger, allerdings schränkt dich der Compiler so weit ein und Unterstützt dich, dass du dir damit (fast) nicht wehtun kannst - im Gegensatz zu Zeigern.

Für den Zweiten gibt es Iteratoren, mit denen du dich in Sammlungen von Elementen bewegen kannst und darauff Zugreifen kannst, diese Ähneln den C++-Zeigern, sind aber eine Abstraktion (gehört nicht so ganz zum Thema, sorry ^^).
Haters gonna hate, potatoes gonna potate.

Panke
Beiträge: 70
Registriert: So Nov 14, 2010 10:47 am

Re: Zeiger vs. Referenz

Beitrag von Panke » Do Jul 12, 2012 4:53 pm

Referenztypen (aka Zeiger, C++-Referenzen, Java-Referenzen) kann man ganz gut an Hand von zwei Eigenschaften vergleichen*:
  • Kann null sein oder nicht
  • Das referenzierte Ding kann sich ändern
Und hier ist eben: Zeiger können null sein und das referenzierte Ding kann sich ändern. Referenzen genau umgekehrt. Eine dritte Alternative, der Zeiger der nicht null sein kann, aber auf verschiedene Dinge zeigen kann, sieht man relativ selten. Das hält Tony Hoare (Erfinder von Quicksort und Algol(?) ) für seinen größten Fehler.

* Besitz wäre eine weitere Dimension. Etwa wie unique_ptr in C++11.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8861
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Zeiger vs. Referenz

Beitrag von Xin » Do Jul 12, 2012 5:08 pm

Panke hat geschrieben:Eine dritte Alternative, der Zeiger der nicht null sein kann, aber auf verschiedene Dinge zeigen kann, sieht man relativ selten.
Das lässt sich über eine Templateklasse abbilden, aber schön ist das trotzdem nicht.
Diese Art von Referenz vermisse ich jedenfalls auch.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten