Forum: Mikrocontroller und Digitale Elektronik Zeigerübergabe für Funktionen durch '&' im Prototypen


von brechbunkt (Gast)


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.)

von Uwe (de0508)


Lesenswert?

Hallo,

ein Einführung liefert Dir auch das Web, z.B. hier

http://www.imb-jena.de/~gmueller/kurse/c_c++/c_operat.html

von TestX .. (xaos)


Lesenswert?

nennt sich "call by reference" - siehe 
http://www.cplusplus.com/doc/tutorial/functions/
hat erstmal nichts "direkt" mit pointern zu tun auch wenn es was 
ähnliches macht..

von cpp gast (Gast)


Lesenswert?

eine Referenz ist quasi ein Pointer, wird aber wie ein Objekt selbst 
verwendet [halt ohne dereferenzierung].

von brechbunkt (Gast)


Lesenswert?

ok, danke für die schnellen Antworten.

von Compi (Gast)


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.

von Rolf Magnus (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.