Modified eine Konstante in c

const int z = 420;

printf("\n%d | %d",z ,*(&(*(&z+1))-1) );
// O/P:420 | 420

printf("\n%u | %u",&z,(&(*(&z+1))-1) );             //address
// O/P:1310548  | 1310548

*((char *)&z+1) = 21;       //I change value for the 1st-Bit
                                    //corrupting constant

 printf("\n%d | %d",z ,*(&(*(&z+1))-1) );
//the complex(not really) expression evaluates to z
// O/P:420| 5540

printf("\n%u | %u",&z ,(&(*(&z+1))-1) );                
//the complex(not really) expression evaluates to &z
// O/P:1310548 | 1310548

Warum passiert dies

it scheint, dass ich Konstante in C @ erfolgreich geändert ha

by modify Ich meine, ich habe die Bits im Adressbereich der Konstanten geändert.

als der "komplexe (nicht wirklich) Einheits- / Identitätsausdruck" den Wert nach Beschädigung ändert.

aber das z bleibt gleich. Warum

wie kommt es, dass gleiche Adressen unterschiedliche Werte haben, wenn sie nicht mehr referenziert werden? ?

PS: Sie können einen beliebigen Identitätsausdruck verwenden

eg.printf("%d",*(int*)((char*)&(*((char*)&z+1))-1));

[bearbeiten

ok lass es mich umformulieren:

z = 420

&z = 1310548

*(&(*(&z+1))-1) = 420

(&(*(&z+1))-1)  = 1310548

Jetzt tue ich, um die Konstante @ zu beschädig

*((char *)&z+1) = 21;

JETZT NACH KORRUPTION:

z = 420     // NO CHANGE EVEN THOUGH I have corrupted

&z = 1310548

*(&(*(&z+1))-1) = z = 5540    // THE CHANGE

(&(*(&z+1))-1)  = &z = 1310548

WARUM

Antworten auf die Frage(6)

Ihre Antwort auf die Frage