Я немного запутался, что произошло в следующем коде:
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 и & e, они имеют одинаковое значение / адрес.
Как же так получилось, что e все еще содержало 2, даже если оно было изменено на 5? Хранились ли они в отдельном месте? Или временный? Но почему значение, обозначенное w, все еще является адресом e?