Konstante Zeiger in C
Ein konstanter Zeiger wird deklariert, indem das »const« hinter das letzte »*«, aber vor den Namen des Zeigers geschrieben wird. Es handelt sich hierbei um nichts anderes als eine konstante Variable, wie sie schon früher beispielsweise mit »int const i = 12;« festgelegt wurde.
Ein konstanter Zeiger kann – wie andere konstante Variablen – nicht verändert werden.
main.c
#include <stdio.h>
int main( void )
{ int i = 27;
int * const p = &i;
printf( "%d\n", *p );
printf( "%d\n", i );}stdout
27
27
Schreibzugriffe über einen konstanten Zeiger sind aber im allgemeinen erlaubt!
Durch das »const« vor dem »p« wird »p =« verboten, nicht aber »*p =« (dazu wäre ein »const« vor dem Sternchen »*« nötig.)
main.c
#include <stdio.h>
int main( void )
{ int i = 27;
int * const p = &i;
printf( "%d\n", *p );
*p = 40; /* Schreibzugriff */
printf( "%d\n", *p );
printf( "%d\n", i ); }stdout
27
40
40
Bei einem konstanten Zeiger »p« gilt also im allgemeinen:
- »*p = …« ist im allgemeinen erlaubt.
- »p = …« ist nicht erlaubt.
Konstante Lesezeiger
Es ist auch möglich, einen Lesezeiger als konstanten Zeiger festzulegen. Das bedeutet, daß dieser Zeiger nicht verändert werden darf, und auch nur zum Lesen verwendet werden darf.
Bei einem konstanten Lesezeiger »p« gilt also:
- »*p = …« ist nicht erlaubt, da Lesezeiger.
- »p = …« ist nicht erlaubt, da konstant.
In »int const * const p = &i;« legt das erste »const« fest, daß »p« ein Lesezeiger ist. Das zweite »const« legt fest, daß »p« ein konstanter Zeiger ist.
main.c
#include <stdio.h>
int main( void )
{ int i = 27;
int const * const p = &i;
printf( "%d\n", *p );
printf( "%d\n", i ); }stdout
27
27