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.