const_cast: тот же адрес, но другое значение? [Дубликат]

На этот вопрос уже есть ответ:

Два разных значения при одном и том же адресе памяти 6 ответов

Новичок в C ++ и изучение const_cast - запутайтесь в приведенном ниже коде:

int main(){
    const int j = 1;
    int * p = (int *)(&j);
    cout << j << ' ' << *p << endl;
    cout << &j << ' ' << p << endl;
    *p = 2;
    cout << j << ' ' << *p << endl;
    cout << &j << ' ' << p << endl;

    const int k = 1;
    int * q = const_cast<int*>(&k);
    cout << k << ' ' << *q << endl;
    cout << &k << ' ' << q << endl;
    *q = 2;
    cout << k << ' ' << *q << endl;
    cout << &k << ' ' << q << endl;

    return 0;
}

Выходы

1 1
00A2FD9C 00A2FD9C
1 2
00A2FD9C 00A2FD9C
1 1
00A2FD84 00A2FD84
1 2
00A2FD84 00A2FD84

Может ли кто-нибудь сказать мне, почему адреса (& i и p, или & j и q) одинаковы, но значения (i и * p или j и * q) разные? Я использую Visual Studio 2013RC.

Ответы на вопрос(2)

Ваш ответ на вопрос