apropos Zeiger!!!!
-
int iarray[] = {11,22,33}
cout<<iarray[1]<<'\n';
oder
cout<<*(iarray+1)<<'\n';
kann ich den array bezeichner iarray einfach so also zeiger verwenden??
oder wie ist das gemeint..wir addieren ja zu dem iarray die 1 und dereferenzieren dann diesen ausdruck...das macht doch nur sinn wenn iarray ein zeiger ist. stimmt das??mfg
-
Der name eines Vektors ist immer auch (konstanter) Zeiger auf das erste Vektorelement. Daher: iarray = &iarray[0]
*(iarray + 1)
Dadurch wird der Zeiger um ein Element verschoben und anschließend dereferenziert, also repräsentiert dann das Objekt an der Anfangsadresse + 1 Element (in dem Fall das zweite Element des Vektors).MfG
-
BOSS schrieb:
int iarray[] = {11,22,33}
cout<<iarray[1]<<'\n';
oder
cout<<*(iarray+1)<<'\n';
kann ich den array bezeichner iarray einfach so also zeiger verwenden??
oder wie ist das gemeint..wir addieren ja zu dem iarray die 1 und dereferenzieren dann diesen ausdruck...das macht doch nur sinn wenn iarray ein zeiger ist. stimmt das??mfg
Ein Ausdruck der auf ein Array verweist (typischerweise der Name eines Arrays) kann implizit in einen Zeigerwert (also ein rvalue eines Pointertyps) konvertiert werden, das Ergebnis ist ein Zeigerwert (nicht: konstanter Zeiger, das implizirte ein Objekt und rvlaues skalarer Typen sind keine Objekte), der nach Dereferenzierung auf das erste Element des Arrays verweist. Diese implizite Konvertierung erlaubt die Verwendung dieses Arraysausdrucks in Ausdrücken, die mit Zeigerwerten arbeiten - wie Zeigerarithmetik oder Dereferenzierung. Dieser Verfall in einen Zeiger tritt sehr häufig auf, da es nur wenige Operatoren gibt, die direkt mit Arrayausdrücken arbeiten und diese Konvertierung unterdrücken (&, sizeof) und Arrays nicht kopierbar sind. Arrays sind dennoch keine Zeiger. Andernfalls wäre es schließlich auch sinnlos, diese Unterscheidung überhaupt erst zu treffen.