Pointer in C?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet
Warum wird in diesem Code nicht ebenfalls nur der Name des Pointers verwendet?

Du meinst vermutlich hier:

void aendern(int *eingabe)
{
  *eingabe = 1;
}
  • Ohne * wird dem Pointer eine andere Variable zugewiesen (statt "int eingabe" in main()).
  • Mit * wird der Variablen, auf die der Pointer zeigt, ein neuer Wert zugewiesen. Speziell in der Funktion aendern() ist das gleichbedeutend mit "eingabe=1;" innerhalb main()).

Das ließe sich leichter erklären, wenn man im Quelltext verschiedene Objekte unterschiedlich benennen würde:

void aendern(int *ptr)
{
  int var = 42;

  *ptr = 1;  /* uebergebene Variable (eingabe) andern */
  ptr = &var;
  *ptr = 43; /* lokale Variable (var) aendern */
}
LuisBuzZ 
Fragesteller
 08.09.2020, 18:19

ahhh danke danke danke

0

Bei dem ersten Beispiel wird die Adresse der Variablen ausgegeben, also wo der Inhalt der Variable steht. Die Adresse der Variable entspricht dem Inhalt des Pointers.

Im zweiten Beispiel wird die Adresse der Variablen in einen Pointer gespeichert, in den Funktionen wird dann auf den Inhalt der Variablen zugegriffen. Da lediglich die Adresse der Variablen (in Form eines Pointers) übergeben wurde, muss der * als Dereferenzierung benutzt werden, um auf den Inhalt zu kommen.

int a = 20;

int* p;

p = &a;

&a ist die Adresse von a, mit p = &a wird die Adresse von p auf die Adresse von a gesetzt. Mit *p wird p dereferenziert, d.h. es wird auf das zugegriffen, was hinter der Adresse steht - der Wert. Also mit *p = ... wird der Wert, auf den p zeigt, geändert, mit p = ... wird die Adresse geändert.