Zeigerübergabe für Funktionen durch '&' im Prototypen

Gast #3642908
Lesenswert?
• ▲
▼
Eine kurze Verständnisfrage für C++ (Ist mir in C bisher noch nie so 
vorgekommen). Ist dieser Prototyp:
1
void aFunctionWithArguments(const QString &string);

gleichbedeutend mit diesem hier?
1
void aFunctionWithArguments(const QString *string);

Bisher habe ich Zeiger immer durch '*' oder '[]' deklariert. Das nun 
durch ein '&' zu deklarieren ist mir irgendwie neu. (Ich hoffe ich 
bekomme nun nicht diese Bemerkungen, ich solle mir ein Buch kaufen. Die 
Google-Suche nach '&' bringt einem irgendwie auch nicht weiter.)
Gast #3642985
Lesenswert?
• ▲
▼
cpp gast schrieb:
> eine Referenz ist quasi ein Pointer, wird aber wie ein Objekt
> selbst verwendet [halt ohne dereferenzierung].

Ne, ne,so ist das nicht. Ein pointer ist selbst eine Variable, die 
Speicher benötigt, und auf eine andere Adresse verweist.
Der Adressoperator & gibt die Zieladresse direkt an und kostet keinen 
Speicher. Das löst der Compiler auf.
Gast #3642991
Lesenswert?
• ▲
▼
brechbunkt schrieb:
> Bisher habe ich Zeiger immer durch '*' oder '[]' deklariert. Das nun
> durch ein '&' zu deklarieren ist mir irgendwie neu. (Ich hoffe ich
> bekomme nun nicht diese Bemerkungen, ich solle mir ein Buch kaufen.

Warum? Das wäre doch am sinnvollsten, zumindest wenn du halbwegs 
ernsthaft die Sprache lernen willst.

Compi schrieb:
> cpp gast schrieb:
>> eine Referenz ist quasi ein Pointer, wird aber wie ein Objekt
>> selbst verwendet [halt ohne dereferenzierung].
>
> Ne, ne,so ist das nicht.

Es ist die übliche Art, wie Referenzen intern implementiert sind. Auf 
Sprachebene sind sie aber was anderes.

> Ein pointer ist selbst eine Variable, die Speicher benötigt, und auf eine
> andere Adresse verweist.

Eine Referenz benötigt laut ISO C++ zwar offiziell selbst keinen 
Speicher, aber ihre Nutzung kann dazu führen, daß Speicher benötigt 
wird.
In
1
struct X { int& i; };
2

3
int i = 3;
4
X x = {i};
wird durchaus Speicher für die Referenz benötigt.

> Der Adressoperator & gibt die Zieladresse direkt an und kostet keinen
> Speicher. Das löst der Compiler auf.

Der Adress-Operator hat damit nichts zu tun.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.