[C++] Konstanten "ändern" / const correctness
Verfasst: 10.06.2012, 13:52
Hi,
mich hat schon immer mal interessiert, ob es irgendwie möglich ist, eine vorher definierte Kostante mit Hilfe von Pointern in ihrem Wert zu ändern.
Im Prinzip gings mir dabei nicht darum wirklich eine Konstante ändern, sondern zu schauen, ob es trotz const doch irgendwie möglich ist.
Da ich keine brauchbaren Infos dazu finden konnte, hab ich einfach mal ein wenig rumprobiert und bin auf ein Ergebnis gekommen, was ich mir nicht so richtig erklären konnte.
Was nun passiert, ist folgendes:
b == (int) 'A' wie erwartet
adresse von pA == &A ebenso wie erwartet
c == 15 // wieso das, wenn A garnicht geändert wurde??
Mit anderen Worten: Wenn ich nun über die Variable A zugreife (egal ob direkt den Wert oder über &A), ist alles wie es sein soll,
Benutze ich hingegen pA wird auf die geänderten Werte zugegriffen, obwohl pA == &A.
Es sieht jetzt so aus, als würde die gleiche Adresse unterschiedliche Werte beinhalten. Handelt es sich hierbei um so eine Art "Address-Mapping" zwischen Stack und Heap?
mich hat schon immer mal interessiert, ob es irgendwie möglich ist, eine vorher definierte Kostante mit Hilfe von Pointern in ihrem Wert zu ändern.
Im Prinzip gings mir dabei nicht darum wirklich eine Konstante ändern, sondern zu schauen, ob es trotz const doch irgendwie möglich ist.
Da ich keine brauchbaren Infos dazu finden konnte, hab ich einfach mal ein wenig rumprobiert und bin auf ein Ergebnis gekommen, was ich mir nicht so richtig erklären konnte.
Code: Alles auswählen
// Die Konstante
const int A = (int) 'A';
// Hilfspointer um den Wert zu ändern
int* pA = (int*) &A;
// Wert ändern
*pA = 15;
int B = A;
int C = *pA;
// Testausgaben
printf("-------------------\n");
printf("value of A: %d\n", A);
printf("value of B: %d\n", A);
printf("value of C: %d\n", A);
printf("-------------------\n");
printf("address of a: %p\n", &A);
printf("pA pointing to: %p\n", pA);
printf("-------------------\n");
b == (int) 'A' wie erwartet
adresse von pA == &A ebenso wie erwartet
c == 15 // wieso das, wenn A garnicht geändert wurde??
Mit anderen Worten: Wenn ich nun über die Variable A zugreife (egal ob direkt den Wert oder über &A), ist alles wie es sein soll,
Benutze ich hingegen pA wird auf die geänderten Werte zugegriffen, obwohl pA == &A.
Es sieht jetzt so aus, als würde die gleiche Adresse unterschiedliche Werte beinhalten. Handelt es sich hierbei um so eine Art "Address-Mapping" zwischen Stack und Heap?