Frage zu Pointern

  • Themenstarter Themenstarter ByeBye 249714
  • Beginndatum Beginndatum
B

ByeBye 249714

Hallo!
Ich arbeite mit C und versuche mir zur Zeit den Umgang mit Pointern klar zu machen... zu folgendem Codeschnipsel habe ich eine Frage:

Code:
void eingabe (int * alpha)
{
   printf ("Gib a ein: ");
   scanf ("%d", alpha);
}

int main (void)
{
   int a;
   eingabe (&a);
   printf ("\nDer Wert von a ist %d", a);
   return 0;
}

Was dort von statten geht glaube ich verstanden zu haben:
Die Funktion eingabe erwartete einen pointer auf eine Integer-Variable. Pointer haben als Werte Adressen (auf diese Adresse zeigen sie). Damit eine Adresse übergeben wird, steht deswegen der Adressoperatur vor a in Zeile 10. Die Funktion scanf erwartet eine Adresse, an die es die eingelesene Zahl speichern kann, also in diesem Fall der Pointer alpha (formaler Parameter) bzw. der aktuelle Paramater, die Adresse von a,.

Warum ist folgendes nicht möglich?:
Code:
void eingabe (int n)
{
   printf ("Gib a ein: ");
   scanf ("%d", &n);
}
 
int main (void)
{
   int a;
   eingabe (a);
   printf ("\nDer Wert von a ist %d", a);
   return 0;
}
Die Funktion nimmt sich die Variable n vom Typ Integer und schreibt in sie den eingelesenen Wert ein.
 
Generell werden bei Parametern immer Kopien (!) der Variablen übergeben.

Beim unteren Code steht also am Anfang in a irgendein Startwert drinnen, weil du ja noch nichts zugewiesen hast.
Von dem Startwert wird beim Funktionsaufruf eine Kopie erstellt, die dann von scanf einen neuen Wert bekommt.
Am Ende der Funktion wird die Kopie wieder gelöscht, und der scanf-Wert ist weg.

Beim oberen Code mit den Pointern wird von der Adresse eine Kopie gemacht.
In der Kopie steht aber eben wieder die gleiche Adresse, somit zeigen beide auf den selben Speicher (in den scanf dann die Eingabe reinschreibt).

Gruß
 
Zuletzt bearbeitet:
Zurück