const_cast и const указатель на const vaiable
Как это возможно, что значение *p
и значение DIM
отличаются, но имеют один и тот же адрес в памяти?
const int DIM=9;
const int *p = &DIM;
* (int *) p = 18; //like const_cast
cout<< &DIM <<" "<< p << '\n';
cout << DIM << " " << *p << '\n';
3 ответа
Это оптимизация компилятора. Учитывая, что DIM является константой, компилятор мог бы заменить ее известное значение.
Вы меняете значение const
переменная, которая является неопределенным поведением. Буквально все, что может произойти, когда вы делаете это, в том числе сбой вашей программы, взрыва вашего компьютера,...
Если переменная должна измениться, не делайте ее const. Компилятор может оптимизировать доступ к константным переменным, поэтому даже если вы нашли удачный способ изменить значение в памяти, ваш код может даже не получить доступ к исходному расположению памяти.
Приведенный ниже код делает то, что вы хотели сделать... как уже упоминалось в других статьях, если вы хотите изменить значение переменной, не определяйте ее как const
#include <stdio.h>
int main()
{
int d= 9;
int *p_d=&d;
*p_d=18;
printf("d=%d\np_d=%d\n",d,*p_d);
return 0;
}
Этот код печатает
d=18
p_d=18