相关疑难解决方法(0)

通过非const指针修改const

我对以下代码中发生的事情感到有点困惑:


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;
Run Code Online (Sandbox Code Playgroud)

在(1)中,w指向e的地址.在(2)中,该值变为5.但是,当显示*w和e的值时,它们的值不同.但是如果你打印w指针和&e的值,它们具有相同的值/地址.

为什么e仍然包含2,即使它被改为5?他们存放在一个单独的位置?还是暂时的?但是,为什么w指出的价值仍然是e的地址?

c++ pointers casting const-correctness

13
推荐指数
2
解决办法
1021
查看次数

在C++中尝试破解常量时的奇怪行为

可能重复:
通过非const指针修改const

我正在学习C++,对指针非常有趣.而我试图改变一个恒定值的值(我的老师叫它backdoor,请澄清我是不是错了)像这样:

const int i = 0;

const int* pi = &i;

int hackingAddress = (int)pi;
int *hackingPointer = (int*)pi;

*hackingPointer = 1;

cout << "Address:\t" << &i << "\t" << hackingPointer << endl;
cout << "Value:  \t" << i << "\t\t" << *hackingPointer << endl;

system("PAUSE");

return 0;
Run Code Online (Sandbox Code Playgroud)

但是,结果很奇怪.虽然两个地址相同,但值不同.

我的代码是如何执行的?哪里01价值准确存储?

c++ memory pointers

1
推荐指数
1
解决办法
394
查看次数

标签 统计

c++ ×2

pointers ×2

casting ×1

const-correctness ×1

memory ×1