0 Tage Serie
c / intermediate
Snippet

Konstante Pointer vs. Pointer auf Konstanten

Die Platzierung des Schlüsselworts 'const' bestimmt, was unveränderlich ist. 'const int *' bedeutet, dass die Daten, auf die gezeigt wird, nicht über diesen Pointer geändert werden können. 'int * const' bedeutet, dass die Pointer-Adresse selbst nach der Initialisierung nicht mehr geändert werden kann.

snippet.c
c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
int main() {
int val = 10, other = 20;
const int *ptr1 = &val; // Pointer to constant
int * const ptr2 = &val; // Constant pointer
ptr1 = &other; // OK: pointer can change
// *ptr1 = 15; // Error: value is constant
*ptr2 = 15; // OK: value can change
// ptr2 = &other; // Error: pointer is constant
return 0;
}
Erklärung
1
const int *ptr1 = &val;
Der Integer-Wert ist aus der Sicht von ptr1 konstant.
2
int * const ptr2 = &val;
Die in ptr2 gespeicherte Pointer-Adresse ist fixiert und kann nicht woandershin zeigen.