Пожалуйста, смотрите, я определил const int & a = 1
ссылкой, и заставил указатель преобразовать pa
в a
, и изменил значение a, изменив pa
. Это было успешно.
Но когда определено const int k = 1
и вышеуказанная операция повторяется, хотя pk
и k
- это один и тот же адрес, * pk
и k
- это не одно и то же значение.
Какой принцип стоит за этим?
Не могли бы вы объяснить, как IDE работает с распределением памяти, когда я это делаю?
const int &a = 1;
int *pa = (int*)&a;
cout << &a << endl;
cout << pa << endl;
*pa = 2;
cout << a << endl;
//And here is the outcome.
//0x7ffeeb5d8a24
//0x7ffeeb5d8a24
//2
Итак, мы изменились a
успешно.
const int k = 1;
cout << &k << endl;
int *pk = (int*)&k;
cout << &k << endl;
cout << pk << endl;
*pk = 2;
cout << *pk << ' ' << k;
//0x7ffeeb5d8a14
//0x7ffeeb5d8a14
//0x7ffeeb5d8a14
//2 1
//Process finished with exit code 0
*pk
и k
здесь имеют одинаковый адрес, но не одно и то же значение! Как это могло случиться?