Я немного смущен, что произошло в следующем коде:
const int e = 2;
int* w = ( int* ) &e; // (1) cast to remove const-ness
*w = 5; // (2)
cout << *w << endl; // (3) outputs 5
cout << e << endl; // (4) outputs 2
cout << "w = " << w << endl; // (5) w points to the address of e
cout << "&e = " << &e << endl;
В (1) w указывает на адрес e. В (2) это значение было изменено на 5. Однако, когда отображались значения * w и e, их значения различны. Но если вы печатаете значение w pointer и & e, они имеют одинаковое значение/адрес.
Почему e все еще содержал 2, даже если он был изменен на 5? Сохранялись ли они в отдельном месте? Или временно? Но почему значение, указанное w, по-прежнему является адресом e?