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 aus f[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


Log in to reply