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
Другие вопросы по тегам