Pointer
-
Hallo liebe C Community,
ich in diesem Semester mit einem C-Kurs angefangen und komme nun ganz und gar nicht mit den Pointern klar. Und zwar geht es konkret um folgende Zeilen:
main() { int i, dim; double *f; /* Zeiger auf ein Variable vom Typ double */ dim = 300; /* lege die Groesse fest */ /* dynamische Zuweisung von Speicherplatz */ f = (double *) malloc(dim * sizeof(double)); if (f == NULL) exit(1); for (i = 0; i < dim; i++) f[i] = 2.0; free(f); }
Bis zur Zeile vor der Initialisierung von f verstehe ich es noch. Es wird der Pointer f deklariert und mit malloc der Speicher reserviert für f als Vektor. Die darauf folgende Initialisierung allerdings ergibt sich mir nicht wirklich. Deshalb meine Fragen:
Wieso kann ich denn einfach f[ i]=2 setzen, für alle i?? Es ist doch mit f[ i] noch überhaupt keine Variable deklariert worden, sondern es ist ja f[ i]=f+i ein Pointer, welcher auf eine Adresse zeigt, welche i stellen hinter f im Speicher steht! Wie kann ich einem Pointer einen Wert, außer der Adresse eines Vektors zuweisen (in diesem Fall 2.0) ?! Und wieso brauche ich nicht die Zeichen &,*, welche mir den Wert bzw die Adresse geben?
Vielen Dank für die Hilfe im Voraus, Gruß
Paul
-
Hallo,
f[i] ist nur eine alternative schreibweise für
*(f + 0)
. Ein Array ist nichts anderes als ein Zeiger.Dabei bezieht sich
*f
=>*(f + 0)
=>f[0]
auf das erste Element. Wenn du also ausf[i] = 2.0
ein*(f + i) = 2.0
machst,
dann hast du das Sternchen (*) wieder.
-
Aaah ok, dann habe ich das falsch verstanden. Ich dachte f[i] würde für die Adresse f+i stehen, aber es ist also der Inhalt dieser Adresse. Dankeschön für die schnelle Antwort
Gruß Paul