2016-02-22 3 views

ответ

2

Вы изменяя значение const переменной, которая неопределенное поведение. Буквально что-нибудь может произойти, когда вы это сделаете, в том числе сбой вашей программы, ваш компьютер взрыва, ...

Если переменная должна быть изменена, не делает ее const. Компилятор может свободно оптимизировать доступ к константным переменным, поэтому, даже если вы нашли успешный способ изменить значение в памяти, ваш код может даже не получить доступ к исходной ячейке памяти.

+0

Спасибо! Я понял! Но я тестировал ограничение const_cast и немного странно видеть два разных значения в одном и том же адресе памяти. –

2

Это оптимизация компилятора. Учитывая, что DIM является константой, компилятор мог бы заменить свое известное значение.

+1

Я только что добавил это к своему ответу, прежде чем вы прокомментировали :-) Upvoted! –

0

ниже код делает то, что вы имели в виду сделать ... как уже упоминалось в других постах, если вы имеете в виду, чтобы изменить значение переменной, не определяют его как 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 
+0

Да, я знал .. Я тестировал, как компилятор интерпретирует const-cast, когда указатель и переменная определены const .. И я не понял, как было возможно, чтобы программа возвращала два разных значения, которые могут быть в одном и том же адресе –

Смежные вопросы