[C] Pointer/Referenz - Unterschied?

randomize

Erfahrenes Mitglied
... zum Beispiel sowas:

int function (int x)
{
return 3;
}
...
int a = 5;
a = function (a);

ist ja klar.

void function (int *x)
{
*x = 3;
}
...
int a = 5;
function (&a);

Falls das funktionstüchtig ist (= akut nicht getestet), verstehe ich es auch noch. Aber das nicht:

void function (int &x)
{
x = 3;
}
...
int a = 5;
function (a);

Was genau erwartet die Funktion jetzt als Parameter?

TIA
 
Ohne jetzt zu theoretisch werden zu wollen, ist's so:

Code:
void function (int *x)
{
*x = 3;
}
...
int a = 5;
function (&a);

Das ist korrekt. Die Funktion erwartet einen Zeiger auf int als Parameter. Durch den & Operator wird die Adresse von a an die Funtkion übergeben. Passt also. In der Funktion hat man einen Zeiger auf int und kann damit rumwurschteln.

Code:
void function (int &x)
{
x = 3;
}
...
int a = 5;
function (a);

Die Funktion erwartet einen int als Parameter. Der Compiler macht die Übergabe aber so, dass der Übergebene Wert nicht kopiert (Call-By-Value), sondern eine Referenz auf die 'original' Variable übergeben wird. Daher kann man in der Funktion die original Variable bearbeiten. Das ist das was man Call-By-Reference nennt.

Warum gibt es diese beiden Möglichkeiten, wo sie doch etwas gleich aussehen?

Den &-Operator für die Parameter-Deklaration gab es in C nicht und ist erst mit C++ eingeführt worden, um Call-By-Reference zu ermöglichen ohne auf Zeiger zurückgreifen zu müssen. That's it.
 
Zurück