c / intermediate
Snippet
Const-Korrektheit bei Pointer-Variationen
Zu verstehen, wo 'const' platziert wird, ist entscheidend für die API-Sicherheit. Ein Pointer auf eine Konstante stellt sicher, dass die Daten nicht geändert werden, während ein konstanter Pointer sicherstellt, dass der Pointer selbst immer auf denselben Speicherort zeigt.
snippet.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>void demonstrate_const() {int val1 = 10, val2 = 20;const int* p1 = &val1; // Pointer to constant int// *p1 = 15; // Error: cannot modify datap1 = &val2; // OK: can change addressint* const p2 = &val1; // Constant pointer to int*p2 = 15; // OK: can modify data// p2 = &val2; // Error: cannot change addressconst int* const p3 = &val1; // Constant pointer to constant int// p3 = &val2; // Error// *p3 = 15; // Error}
Erklärung
1
const int* p1
Die Daten, auf die gezeigt wird, sind über diesen Pointer schreibgeschützt.
2
int* const p2
Die im Pointer gespeicherte Speicheradresse ist fest und kann nach der Initialisierung nicht mehr geändert werden.