# [C] Pointer/Referenz - Unterschied?



## randomize (29. April 2004)

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


----------



## oglimmer (30. April 2004)

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


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


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


----------



## randomize (30. April 2004)

Danke, macht wirklich Sinn.

Der Erkenntnis wieder ein Stück näher. 

Ciao


----------

