Pointer auf Array



  • Hallo,

    ich habe eine Frage zu den verschiedenen Schreibweisen bei Arrays und Pointern. Ich habe einen Integer Pointer, der auf das 3. Element meines integer Array zeigen soll. Meine Frage nun:

    Warum funktioniert

    ptr = &(array + 3)
    

    nicht?

    Und warum funktioniert

    ptr = (array + 3) und ptr = &(*(array + 3))
    

    und was ist der Unterschied zwischen den zwei?

    MfG



  • Das erste würde - wenn es denn kompiliert - die Adresse des Ausdrucks (array + 3) liefern. Da dieser nirgendwo gespeichert ist, hat der keine Adresse.
    Das zweite nimmt die Adresse des 3ten Elements im Array.



  • Adressen kann man nur von LValues ermitteln.

    array + 3 ist eine berechnete Adresse und hat selber keine Adresse.

    Da array +3 schon eine Adresse ist, kannst Du diesen Wert Deinem Zeiger zuweisen.

    ×(array +3) ist ein LValue, daher kannst Du den Adressoperator darauf anwenden. Ist natürlich unnötig, da es das gleiche ist wie array+3



  • Was noch geht ist

    ptr = &(array[3]);
    

    Denn auch da hast du wieder ein Element, das eine Adresse hat.


Anmelden zum Antworten