Ja. Die *
Notation besagt, dass das, was auf dem Stapel übergeben wird, ein Zeiger ist, dh eine Adresse von etwas. Das &
sagt, es ist eine Referenz. Der Effekt ist ähnlich, aber nicht identisch:
Nehmen wir zwei Fälle:
void examP(int* ip);
void examR(int& i);
int i;
Wenn ich anrufe examP
, schreibe ich
examP(&i);
Dies nimmt die Adresse des Elements und übergibt sie an den Stapel. Wenn ich anrufeexamR
,
examR(i);
Ich brauche es nicht; jetzt übergibt der Compiler "irgendwie" eine Referenz - was praktisch bedeutet, dass er die Adresse von erhält und übergibt i
. Auf der Codeseite also
void examP(int* ip){
*ip += 1;
}
Ich muss sicherstellen, dass der Zeiger dereferenziert wird. ip += 1
macht etwas ganz anderes.
void examR(int& i){
i += 1;
}
aktualisiert immer den Wert von i
.
Weitere Informationen finden Sie unter "Call by Reference" im Vergleich zu "Call by Value". Der &
Begriff gibt C ++ Aufruf als Referenz.