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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren