không const Tôi là một chút nhầm lẫn gì đã xảy ra trong đoạn mã sau:Sửa đổi một const qua một con trỏ
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;
Trong (1), điểm w đến địa chỉ của e. Trong (2), giá trị đó đã được thay đổi thành 5. Tuy nhiên, khi các giá trị của * w và e được hiển thị, các giá trị của chúng khác nhau. Nhưng nếu bạn in giá trị của con trỏ w và & e, chúng có cùng giá trị/địa chỉ.
Cách e vẫn chứa 2, ngay cả khi nó được đổi thành 5? Chúng được lưu trữ ở một vị trí riêng biệt? Hoặc tạm thời? Nhưng làm sao giá trị được chỉ ra bởi w vẫn là địa chỉ của e?
Bạn đang ở trong vùng hành vi không xác định - mọi thứ đều có thể xảy ra. –
Tâm trí của tôi là quá mệt mỏi để xem những gì đang xảy ra, nhưng bạn có thể sử dụng const_cast cho việc này. Nếu bạn hỏi chỉ để hiểu những gì đang xảy ra, bạn có thể bỏ qua nhận xét này. – erelender
@erelender: Bạn có thể sử dụng 'const_cast' cho điều này nhưng nó sẽ không làm cho hành vi bất kỳ ít không xác định. –