Код 1:
int main(){
int a=1;
int b=2;
cout << "&a: "<<&a << endl;
}
Выход 1:
&a: 0x22ff48
Код 2:
int main(){
int a=1;
int b=2;
cout << "&a: "<<&a << endl;
cout << "&b: "<<&b << endl;
}
Выход 2:
&a: 0x22ff4c
&b: 0x22ff48
Так что мой вопрос, почему адрес варибале a
изменилось, когда я распечатал адрес варибале b
?
Когда ты не использовал b
В общем, компилятор, вероятно, удалил его полностью, поэтому он не занимал места.
Когда вы взяли адрес b
, что заставило компилятор выделить для него место.
В любом случае, ОС может загрузить исполняемый образ по другому (виртуальному) базовому адресу в следующий раз.
То, что вы наблюдаете не определено во всяком случае. Дело в том, четное если никакие переменные не оптимизированы, и программа не перекомпилируется, она может каждый раз давать разные результаты.
Это может будет определена реализация, если вы считаете ОС как часть реализация