====== Zeiger und Arrays - Zeigerarithmetik ====== Arrays nutzen das Modell des linearen Speichers, d.h., ein im Index nachfolgendes Element ist auch physisch im unmittelbar nachfolgenden Speicherbereich abgelegt. Dieser Fakt erlaubt die Interpretation von Zeigervariablen als Arraybezeichner und umgekehrt. { const int N = 10; int a[N], *pint; // array and pointer pint = &a[0]; // init pointer } Arraybezeichner werden prinzipiell als Zeiger behandelt, daher ist die Programmzeile pint = &a[0]; identisch mit pint = a; Folgerichtig stellen daher die Ausdrücke a[1] , *(a+1) , *(pint+1) , pint[1] den identischen Zugriff auf das Feldelement a1 dar. {{:inf:cpp:zeiger_und_arrays1.png?600|}} ++++ Testprogramm| // pointer and arrays #include using namespace std; const int N =10; int a[N], *pint; // array and pointer int main() {cout << "Uebungen zu Zeiger und Arrays\n"; // Initialisieren des Arrays mit Quadrat des Index for (int i=0;i ++++ Die Adresse welche durch ''(pint+1)'' dargestellt wird ergibt sich zu ''(Adresse in pint) + sizeof(int)''. Dabei bezeichnet ''int'' den Datentyp, auf welchen der Zeiger ''pint'' verweist. Der Zugriff auf andere Feldelemente ''ai, i = 0 ... N-1'' ist analog. Die folgenden Operatoren sind auf Zeiger anwendbar: * Vergleichsoperatoren: ''== , != , < , > , <= , >='' * Addition ''+'' und Subtraktion ''-'' * Inkrement ''%%++%%'' , Dekrement ''%%--%%'' und zusammengesetzte Operatoren ''+='' , ''-='' Zur Demonstration betrachten wir ein Beispiel, in welchem ein Feld erst auf konventionelle Weise definiert und initialisiert wird um danach mittels Zeigeroperationen ausgegeben zu werden. {{:inf:cpp:zeiger_und_arrays2.png?800|}} // Pointers and arrays #include main() { const int N=10; double a[N], *pa, *pp, *pi; int i; // initialize a pa = a; for (i=0;i ++++ gesamtes Programm| // Pointers and arrays #include using namespace std; int main() { const int N=10; double a[N], *pa, *pp, *pi; int i; cout << "Pointers and arrays" << endl << endl; pa = &a[0]; pp = a; if ( pa == pp) cout << endl << " pa and pp are identical" << endl; // initialize a for (i=0;i ++++