{
const int N = 10;
int f[N], *pint; // array and pointer
pint = &f[0]; // init pointer
}
|
Feldbezeichner werden prinzipiell als Zeiger behandelt, daher ist die
Programmzeile
pint = &f[0];
identisch mit
pint = f;
Folgerichtig stellen daher die Ausdrücke
f[1] , *(f+1) , *(pint+1) , pint[1]
den identischen Zugriff auf das Feldelement f1 dar.
(siehe Ex630.cc)
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 fi,
i = 0...N - 1 ist analog.
Die folgenden Operatoren sind auf Zeiger anwendbar:
== , != , < , > , <= , >=
+ und Subtraktion -
++ , 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. (siehe Ex630.cc)
// Pointers and arrays
#include <iostream.h>
main()
{
const int N=10;
double x[N], *px, *pp, *pi;
int i;
// initialize x
px = x;
for (i = 0; i < N; i++ )
{
*(px+i) = (i+1)*(i+1); // x[i] = ...
}
// output x;
// pointer pi as loop variable
pp = x+N-1; // pointer at last element of x
for ( pi = x; pi <= pp; pi++)
{
cout << " " << *pi << endl;
}
}
|